* fichier : dfdtsour.dgibi * ******************** cas test dfdtsour.dgibi ************************ * * *-------------------------------------------------------------------- * Test élémentaire de l'opérateur DFDT (discrétisation temporelle). *-------------------------------------------------------------------- * On résoud dc/dt = s avec s densité de source ([c]/s/m3) : * L'opérateur DFDT discrétise la dérivée en temps; * L'opérateur FIMP discrétise la densité de source en EFM1; * L'opérateur ECHI discrétise la densité de source en EF. * La condition initiale c(x,t=0) vaut 0.1 et s est constant au cours * du temps, égale à 1 (resp. 0.) sur le demi-domaine gauche (resp. * droit). * La solution au cours du temps est c(x,t) = c(x,t=0) + t*s0 * où s0 est égale à 0.1 pour les points situés à la frontière gauche, * 0.05 pour les points situé sur la séparation entre les deux demi * domaine et 0. pour les points situés à la frontière droite. * * +-----------+------------+--------------------------+ * | Temps | Espace | Décentrement | * | IMPL EXPL | EFM1 EF VF | CENTREE SUPGDC SUPG TVIS | * +------+-----------+------------+--------------------------+ * | DFDT | x - | x x x | x sans interet ici | * +------+-----------+------------+--------------------------+ * * FIMP : Compatible avec DFDT en EFM1 * ECHI : Compatible avec DFDT en EF et VF pour un champ scalaire * * Pour utiliser ECHI on introduit une inconnue auxiliaire nulle t : * dc/dt + h(t-s) = 0 * h(t-t0) = 0 * avec h=1 et t0=0 * On s'amuse à considérer t au CENTRE ou t au SOMMET. * *-------------------------------------------------------------------- * Auteurs : L.ARNAUD et F.DABBENE (TTMF & LESY) 08/97 *-------------------------------------------------------------------- * GRAPH = 'N' ; 'OPTI' 'DIME' 2 'ELEM' 'QUA4' 'ECHO' 0 ; * *====================== * CREATION DU MAILLAGE *====================== * * Points * A = 0.D0 0.D0 ; B = 0.D0 0.1D0 ; C = 0.1D0 0.1D0 ; D = 0.1D0 0.D0 ; * * Droites * NP1 = 5 ; AB = 'DROI' NP1 A B ; BC = 'DROI' NP1 B C ; CD = 'DROI' NP1 C D ; DA = 'DROI' NP1 D A ; * * Maillage et table DOMAINE * DOMAI1 = 'DALL' AB BC CD DA ; MT = CHAN DOMAI1 QUAF ; $DOMAI1 = 'MODE' MT 'NAVIER_STOKES' LINE ; * *======================== * DEFINITION DU PROBLEME *======================== * * Initialisation des données temporelles * * NITER1 : Nombre de pas de temps * DELTA_T : Valeur du pas de temps * NITER1 = 5 ; DELTA_T = 1.D-1 ; TFINAL1 = NITER1 * DELTA_T ; * * Initialisation de la source * (attention au signe et au support suivant l'opérateur) * SGAU0 = 1.D0 ; COR1 = 'COOR' 1 (DOMA $DOMAI1 'CENTRE') ; MASKM1 = (COR1 'MASQ' 'INFERIEUR' 0.05D0) * (1.D0) * SGAU0 ; COR2 = 'COOR' 1 (DOMA $DOMAI1 'SOMMET') ; MASKM2 = (COR2 'MASQ' 'INFERIEUR' 0.05D0) * SGAU0 ; MASKM3 = (COR1 'MASQ' 'INFERIEUR' 0.05D0) * SGAU0 ; * * Création des modèles numériques * *--- EFM1 * RV1 = 'EQEX' $DOMAI1 'ITMA' NITER1 'OPTI' 'EF' 'IMPL' 'ZONE' $DOMAI1 'OPER' 'FIMP' 'CO11' 'INCO' 'XI' 'OPTI' 'EFM1' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'DFDT' 'COEF' 'XI' 'DT' 'UN' 1.e-20 'INCO' 'XI' ; RV1.'DT' = DELTA_T ; RV1.'INCO'.'CO11' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' MASKM1 ; RV1.'INCO'.'XI' = 'KCHT' $DOMAI1 'SCAL' 'SOMMET' 0.1D0 ; RV1.'INCO'.'UN' = 'KCHT' $DOMAI1 'VECT' 'SOMMET' (0.D0 0.D0) ; RV1.'INCO'.'COEF' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 1.D0 ; RV1.'INCO'.'DT' = RV1.'DT' ; * *--- EF avec inconnue auxiliaire au SOMMET * RV2 = 'EQEX' $DOMAI1 'ITMA' NITER1 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 0.D0 'INCO' 'TS' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 'SOU1' 'INCO' 'TS' 'XI' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'DFDT' 'COEF' 'XI' 'DT' 'UN' 1.e-20 'INCO' 'XI' ; RV2.'DT' = DELTA_T ; RV2.'INCO'.'SOU1' = 'KCHT' $DOMAI1 'SCAL' 'SOMMET' MASKM2 ; RV2.'INCO'.'TS' = 'KCHT' $DOMAI1 'SCAL' 'SOMMET' 0.D0 ; RV2.'INCO'.'XI' = 'KCHT' $DOMAI1 'SCAL' 'SOMMET' 0.1D0 ; RV2.'INCO'.'UN' = 'KCHT' $DOMAI1 'VECT' 'SOMMET' (0.D0 0.D0) ; RV2.'INCO'.'COEF' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 1.D0 ; RV2.'INCO'.'DT' = RV2.'DT' ; * *--- EF avec inconnue auxiliaire au CENTRE * RV3 = 'EQEX' $DOMAI1 'ITMA' NITER1 'OPTI' 'VF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 0.D0 'INCO' 'TC' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 'SOU1' 'INCO' 'TC' 'XI' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'DFDT' 'COEF' 'XI' 'DT' 'UN' 1.e-20 'INCO' 'XI' ; RV3.'DT' = DELTA_T ; RV3.'INCO'.'SOU1' = 'KCHT' $DOMAI1 'SCAL' 'SOMMET' MASKM2 ; RV3.'INCO'.'TC' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 0.D0 ; RV3.'INCO'.'XI' = 'KCHT' $DOMAI1 'SCAL' 'SOMMET' 0.1D0 ; RV3.'INCO'.'UN' = 'KCHT' $DOMAI1 'VECT' 'SOMMET' (0.D0 0.D0) ; RV3.'INCO'.'COEF' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 1.D0 ; RV3.'INCO'.'DT' = RV3.'DT' ; * *--- VF avec inconnue auxiliaire au CENTRE * RV4 = 'EQEX' $DOMAI1 'ITMA' NITER1 'OPTI' 'VF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 0.D0 'INCO' 'TC' 'OPTI' 'VF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 'SOU1' 'INCO' 'TC' 'XI' 'OPTI' 'VF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'DFDT' 'COEF' 'XI' 'DT' 'UN' 1.e-20 'INCO' 'XI' ; RV4.'DT' = DELTA_T ; RV4.'INCO'.'SOU1' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' MASKM3 ; RV4.'INCO'.'TC' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 0.D0 ; RV4.'INCO'.'XI' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 0.1D0 ; RV4.'INCO'.'UN' = 'KCHT' $DOMAI1 'VECT' 'SOMMET' (0.D0 0.D0) ; RV4.'INCO'.'COEF' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 1.D0 ; RV4.'INCO'.'DT' = RV4.'DT' ; * *--- VF avec inconnue auxiliaire au SOMMET * RV5 = 'EQEX' $DOMAI1 'ITMA' NITER1 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 0.D0 'INCO' 'TS' 'OPTI' 'VF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'ECHI' 1.D0 'SOU1' 'INCO' 'TS' 'XI' 'OPTI' 'VF' 'IMPL' 'CENTREE' 'ZONE' $DOMAI1 'OPER' 'DFDT' 'COEF' 'XI' 'DT' 'UN' 1.e-20 'INCO' 'XI' ; RV5.'DT' = DELTA_T ; RV5.'INCO'.'SOU1' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' MASKM3 ; RV5.'INCO'.'TS' = 'KCHT' $DOMAI1 'SCAL' 'SOMMET' 0.D0 ; RV5.'INCO'.'XI' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 0.1D0 ; RV5.'INCO'.'UN' = 'KCHT' $DOMAI1 'VECT' 'SOMMET' (0.D0 0.D0) ; RV5.'INCO'.'COEF' = 'KCHT' $DOMAI1 'SCAL' 'CENTRE' 1.D0 ; RV5.'INCO'.'DT' = RV5.'DT' ; * * *=========================== * RESOLUTION DU TRANSITOIRE *=========================== * EXEC rv1 ; EXEC rv2 ; EXEC rv3 ; EXEC rv4 ; EXEC rv5 ; * *======================== * TEST DE NON REGRESSION *======================== * DSOL1 = 'ELNO' $DOMAI1 ('KCHT' $DOMAI1 'SCAL' 'CENTRE' (1.d0*MASKM1)); DSOL2 = MASKM2 ; DSOL3 = MASKM3 ; SOL0 = 'MANU' 'CHPO' (DOMA $DOMAI1 'MAILLAGE') 1 'SCAL' 0.1D0 ; SOL00 = 'MANU' 'CHPO' (DOMA $DOMAI1 'CENTRE') 1 'SCAL' 0.1D0 ; SOL1 = TFINAL1 * DSOL1 + SOL0 ; SOL2 = TFINAL1 * DSOL2 + SOL0 ; SOL3 = TFINAL1 * DSOL3 + SOL00; ERR1 = 'ABS' (RV1.'INCO'.'XI' - SOL1 / SOL1) ; ERR2 = 'ABS' (RV2.'INCO'.'XI' - SOL2 / SOL2) ; ERR3 = 'ABS' (RV3.'INCO'.'XI' - SOL2 / SOL2) ; ERR4 = 'ABS' (RV4.'INCO'.'XI' - SOL3 / SOL3) ; ERR5 = 'ABS' (RV5.'INCO'.'XI' - SOL3 / SOL3) ; OK1 = 'MAXI' (ERR1+ERR2+ERR3+ERR4+ERR5) ; TOL1 = 1.D-13 ; 'SAUT' 5 'LIGNE' ; 'MESS' 'Cumul Erreur :' OK1 'Tolerance :' TOL1 ; 'SI' ( OK1 > TOL1) ; 'ERRE' 5 ; 'SINO' ; 'ERRE' 0 ; 'FINS' ; * *================= * Post-traitement *================= * 'SI' ('NEG' GRAPH 'N') ; MO1 = 'MODE' (DOMA $DOMAI1 'MAILLAGE') 'THERMIQUE' ; $$DOMAI1 = DOMA $DOMAI1 'TABLE' ; DS1 = 'KCHA' $$DOMAI1 'CHAM' SOL3 ; DS2 = 'KCHA' $$DOMAI1 'CHAM' (RV4.'INCO'.'XI') ; DS3 = 'KCHA' $$DOMAI1 'CHAM' (RV5.'INCO'.'XI') ; DS4 = 'KCHA' $$DOMAI1 'CHAM' ERR4 ; DS5 = 'KCHA' $$DOMAI1 'CHAM' ERR5 ; * 'TITR' 'Solution exacte EFM1' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') SOL1 ; 'TITR' 'Solution K2000 EFM1' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') RV1.'INCO'.'XI' ; 'TITR' 'Erreur Relative EFM1' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') ERR1 ; * 'TITR' 'Solution exacte EF' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') SOL2 ; 'TITR' 'Solution K2000 EF, ECHI au SOMMET' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') RV2.'INCO'.'XI' ; 'TITR' 'Erreur Relative EF, ECHI au SOMMET' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') ERR2 ; 'TITR' 'Solution K2000 EF, ECHI au CENTRE' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') RV3.'INCO'.'XI' ; 'TITR' 'Erreur Relative EF, ECHI au CENTRE' ; 'TRAC' (DOMA $DOMAI1 'MAILLAGE') ERR3 ; * 'TITR' 'Solution exacte VF' ; 'TRAC' MO1 DS1 ; 'TITR' 'Solution K2000 VF, ECHI AU SOMMET' ; 'TRAC' MO1 DS3 ; 'TITR' 'Erreur Relative VF, ECHI AU SOMMET' ; 'TRAC' MO1 DS5 ; 'TITR' 'Solution K2000 VF, ECHI AU CENTRE' ; 'TRAC' MO1 DS2 ; 'TITR' 'Erreur Relative VF, ECHI AU CENTRE' ; 'TRAC' MO1 DS4 ; 'FINS' ; 'FIN' ;