Changeset 5113 for LMDZ6/branches/Amaury_dev/libf/dyn3dmem/vlsplt_loc.f90
- Timestamp:
- Jul 24, 2024, 1:17:08 PM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/vlsplt_loc.f90
r5105 r5113 53 53 INTEGER :: ijb, ije, ijb_x, ije_x 54 54 55 ! !write(*,*) 'vlsplt 58: entree dans vlx_loc, iq,ijb_x=',55 !write(*,*) 'vlsplt 58: entree dans vlx_loc, iq,ijb_x=', 56 56 ! & iq,ijb_x 57 57 ! calcul de la pente a droite et a gauche de la maille … … 68 68 ! calcul des pentes avec limitation, Van Leer scheme I: 69 69 ! ----------------------------------------------------- 70 ! !on a besoin de q entre ijb et ije70 ! on a besoin de q entre ijb et ije 71 71 ! calcul de la pente aux points u 72 72 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) … … 145 145 ENDIF ! (pente_max.lt.-1.e-5) 146 146 147 ! !write(*,*) 'vlx 156: iq,ijb_x=',iq,ijb_x147 !write(*,*) 'vlx 156: iq,ijb_x=',iq,ijb_x 148 148 149 149 ! bouclage de la pente en iip1: … … 169 169 ! PRINT*,'Cumule ....' 170 170 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 171 ! !on a besoin de masse entre ijb et ije171 ! on a besoin de masse entre ijb et ije 172 172 DO l = 1, llm 173 173 DO ij = ijb, ije - 1 … … 244 244 ENDDO 245 245 niju = iju 246 ! !PRINT*,'vlx 278, niju,nl',niju,nl(l)246 !PRINT*,'vlx 278, niju,nl',niju,nl(l) 247 247 248 248 ! traitement des mailles … … 302 302 303 303 do ifils = 1, tracers(iq)%nqDescen 304 ! !attention: comme Ratio est utilisé comme q dans l'appel305 ! !recursif, il doit contenir à lui seul tous les indices de tous306 ! !les descendants!304 ! attention: comme Ratio est utilisé comme q dans l'appel 305 ! recursif, il doit contenir à lui seul tous les indices de tous 306 ! les descendants! 307 307 iq2 = tracers(iq)%iqDescen(ifils) 308 308 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 309 309 DO l = 1, llm 310 310 DO ij = ijb, ije 311 ! !On a besoin de q et masse seulement entre ijb et ije. On ne312 ! !les calcule donc que de ijb à ije313 ! !MVals: veiller a ce qu'on n'ait pas de denominateur nul311 ! On a besoin de q et masse seulement entre ijb et ije. On ne 312 ! les calcule donc que de ijb à ije 313 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 314 314 masse(ij, l, iq2) = max(masse(ij, l, iq) * q(ij, l, iq), min_qMass) 315 315 if (q(ij, l, iq)>min_qParent) then ! modif 13 nov 2020 … … 333 333 DO l = 1, llm 334 334 DO ij = ijb + 1, ije 335 ! !MVals: veiller a ce qu'on n'ait pas de denominateur nul335 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 336 336 new_m = max(masse(ij, l, iq) + u_m(ij - 1, l) - u_m(ij, l), min_qMass) 337 337 q(ij, l, iq) = (q(ij, l, iq) * masse(ij, l, iq) + & … … 349 349 350 350 ! retablir les fils en rapport de melange par rapport a l'air: 351 ! !On calcule q entre ijb+1 et ije -> on fait pareil pour ratio352 ! !puis on boucle en longitude351 ! On calcule q entre ijb+1 et ije -> on fait pareil pour ratio 352 ! puis on boucle en longitude 353 353 do ifils = 1, tracers(iq)%nqDescen 354 354 iq2 = tracers(iq)%iqDescen(ifils) … … 495 495 if (pole_sud) ije = ij_end - iip1 496 496 497 ! !on a besoin de q entre ij_begin-2*iip1 et ij_end+2*iip1498 ! !Si pole sud, entre ij_begin-2*iip1 et ij_end499 ! !Si pole Nord, entre ij_begin et ij_end+2*iip1497 ! on a besoin de q entre ij_begin-2*iip1 et ij_end+2*iip1 498 ! Si pole sud, entre ij_begin-2*iip1 et ij_end 499 ! Si pole Nord, entre ij_begin et ij_end+2*iip1 500 500 DO ij = ijb, ije 501 501 dyqv(ij) = q(ij, l, iq) - q(ij + iip1, l, iq) … … 706 706 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 707 707 DO l = 1, llm 708 ! !modif des bornes: CRisi 16 nov 2020709 ! !d'abord masse avec bornes corrigées708 ! modif des bornes: CRisi 16 nov 2020 709 ! d'abord masse avec bornes corrigées 710 710 DO ij = ijbm, ijem 711 ! !MVals: veiller a ce qu'on n'ait pas de denominateur nul711 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 712 712 masse(ij, l, iq2) = max(masse(ij, l, iq) * q(ij, l, iq), min_qMass) 713 713 enddo 714 714 715 ! !ensuite Ratio avec anciennes bornes715 ! ensuite Ratio avec anciennes bornes 716 716 DO ij = ijb, ije 717 ! !MVals: veiller a ce qu'on n'ait pas de denominateur nul717 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 718 718 if (q(ij, l, iq)>min_qParent) then ! modif 13 nov 2020 719 719 Ratio(ij, l, iq2) = q(ij, l, iq2) / q(ij, l, iq) … … 859 859 !$OMP THREADPRIVATE(first) 860 860 861 ! !REAL masseq(ijb_u:ije_u,llm,nqtot),Ratio(ijb_u:ije_u,llm,nqtot) ! CRisi862 ! !Ces varibles doivent être déclarées en pointer et en save dans863 ! !vlz_loc si on veut qu'elles soient vues par tous les threads.861 !REAL masseq(ijb_u:ije_u,llm,nqtot),Ratio(ijb_u:ije_u,llm,nqtot) ! CRisi 862 ! Ces varibles doivent être déclarées en pointer et en save dans 863 ! vlz_loc si on veut qu'elles soient vues par tous les threads. 864 864 INTEGER :: ifils, iq2 ! CRisi 865 865 … … 870 870 ! sens de W 871 871 872 ! !write(*,*) 'vlsplt 926: entree dans vlz_loc, iq=',iq872 !write(*,*) 'vlsplt 926: entree dans vlz_loc, iq=',iq 873 873 874 874 ijb = ijb_x … … 954 954 ENDDO 955 955 !$OMP END DO NOWAIT 956 ! !write(*,*) 'vlz 1001'956 !write(*,*) 'vlz 1001' 957 957 958 958 ELSE ! countcfl>=1 … … 1013 1013 lorig(ij, l) = lorig(ij, l) - 1 1014 1014 ENDIF 1015 ! !CRisi 24nov2020: ajout d'un message d'erreur clair au lieu d'un plantage1016 ! !pour seg fault1015 ! CRisi 24nov2020: ajout d'un message d'erreur clair au lieu d'un plantage 1016 ! pour seg fault 1017 1017 if (lorig(ij, l)==0) then 1018 1018 CALL abort_gcm("vlz in vlsplt_loc", & … … 1064 1064 DO l = 1, llm 1065 1065 DO ij = ijb, ije 1066 ! !MVals: veiller a ce qu'on n'ait pas de denominateur nul1066 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 1067 1067 masse(ij, l, iq2) = max(masse(ij, l, iq) * q(ij, l, iq), min_qMass) 1068 1068 if (q(ij, l, iq)>min_qParent) then … … 1071 1071 Ratio(ij, l, iq2) = min_ratio 1072 1072 endif 1073 ! !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai20151073 !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015 1074 1074 w(ij, l, iq2) = wq(ij, l, iq) 1075 1075 enddo
Note: See TracChangeset
for help on using the changeset viewer.