Changeset 2787 for LMDZ5/branches/testing/libf/dyn3dmem
- Timestamp:
- Jan 30, 2017, 5:54:45 PM (8 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2728,2730-2775,2777-2785
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/dyn3dmem/bands.F90
r2408 r2787 219 219 minvalue=value(i) 220 220 min_proc=index(i) 221 if (jj_nb_caldyn(max_proc)> 3) then221 if (jj_nb_caldyn(max_proc)>2) then 222 222 if (timer_iteration(jj_nb_caldyn(min_proc)+1,timer_caldyn,min_proc)<=1 ) then 223 223 jj_nb_caldyn(min_proc)=jj_nb_caldyn(min_proc)+1 … … 287 287 min_proc=index(i) 288 288 289 if (jj_nb_vanleer(max_proc)> 3) then289 if (jj_nb_vanleer(max_proc)>2) then 290 290 if (timer_average(jj_nb_vanleer(min_proc)+1,timer_vanleer,min_proc)==0. .or. & 291 291 timer_average(jj_nb_vanleer(max_proc)-1,timer_vanleer,max_proc)==0.) then -
LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90
r2641 r2787 2130 2130 USE comconst_mod, ONLY: pi 2131 2131 USE comvert_mod, ONLY: presnivs 2132 use netcdf95, only: nf95_def_var, nf95_put_var 2133 use netcdf, only: nf90_float 2134 2132 2135 IMPLICIT NONE 2133 2136 … … 2149 2152 INTEGER :: nid, id_lonu, id_lonv, id_latu, id_latv, id_tim, id_lev 2150 2153 INTEGER :: vid_lonu,vid_lonv,vid_latu,vid_latv,vid_cu,vid_cv,vid_lev 2151 INTEGER :: vid_au,vid_av 2154 INTEGER :: vid_au,vid_av, varid_alpha_t, varid_alpha_q 2152 2155 INTEGER, DIMENSION (3) :: dim3 2153 2156 INTEGER, DIMENSION (4) :: dim4,count,start 2154 2157 INTEGER :: ierr, varid,l 2155 REAL zu(ip1jmp1),zv(ip1jm) 2158 REAL zu(ip1jmp1),zv(ip1jm), zt(iip1, jjp1), zq(iip1, jjp1) 2156 2159 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: field_glo 2157 2160 … … 2171 2174 print*,'guide_out apres gather ' 2172 2175 CALL Gather_field_u(alpha_u,zu,1) 2176 CALL Gather_field_u(alpha_t,zt,1) 2177 CALL Gather_field_u(alpha_q,zq,1) 2173 2178 CALL Gather_field_v(alpha_v,zv,1) 2174 2179 … … 2207 2212 ierr=NF_DEF_VAR(nid,"au",NF_FLOAT,2,(/id_lonu,id_latu/),vid_au) 2208 2213 ierr=NF_DEF_VAR(nid,"av",NF_FLOAT,2,(/id_lonv,id_latv/),vid_av) 2209 2214 call nf95_def_var(nid, "alpha_T", nf90_float, (/id_lonv, id_latu/), & 2215 varid_alpha_t) 2216 call nf95_def_var(nid, "alpha_q", nf90_float, (/id_lonv, id_latu/), & 2217 varid_alpha_q) 2218 2210 2219 ierr=NF_ENDDEF(nid) 2211 2220 … … 2232 2241 ierr = NF_PUT_VAR_REAL(nid,vid_av,alpha_v) 2233 2242 #endif 2243 call nf95_put_var(nid, varid_alpha_t, zt) 2244 call nf95_put_var(nid, varid_alpha_q, zq) 2234 2245 ! -------------------------------------------------------------------- 2235 2246 ! Cr�ation des variables sauvegard�es -
LMDZ5/branches/testing/libf/dyn3dmem/parallel_lmdz.F90
r2641 r2787 154 154 if ( i < MOD((jjm+1),mpi_size) ) jj_nb_para(i)=jj_nb_para(i)+1 155 155 156 if (jj_nb_para(i) <= 2) then156 if (jj_nb_para(i) <= 1 ) then 157 157 158 158 write(lunout,*)"Arret : le nombre de bande de lattitude par process est trop faible (<2)." -
LMDZ5/branches/testing/libf/dyn3dmem/vlsplt_loc.F
r2641 r2787 885 885 c 886 886 INTEGER i,ij,l,j,ii 887 888 REAL,DIMENSION(ijb_u:ije_u,llm+1) :: wresi,morig,qorig,dzqorig 889 INTEGER,DIMENSION(ijb_u:ije_u,llm+1) :: lorig 890 INTEGER,SAVE :: countcfl 891 !$OMP THREADPRIVATE(countcfl) 887 892 c 888 893 REAL newmasse … … 911 916 ! vlz_loc si on veut qu'elles soient vues par tous les threads. 912 917 INTEGER ifils,iq2 ! CRisi 918 913 919 914 920 IF (first) THEN … … 968 974 ENDIF 969 975 #endif 976 977 !-------------------------------------------------------- 978 ! On repere les points qui violent le CFL (|w| > masse) 979 !-------------------------------------------------------- 980 981 countcfl=0 982 ! print*,'vlz nouveau' 983 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 984 DO l = 2,llm 985 DO ij = ijb,ije 986 IF( (w(ij,l,iq)>0.AND.w(ij,l,iq)>masse(ij,l,iq)) 987 s .OR. (w(ij,l,iq)<=0.AND.ABS(w(ij,l,iq))>masse(ij,l-1,iq)) ) 988 s countcfl=countcfl+1 989 ENDDO 990 ENDDO 991 c$OMP END DO NOWAIT 992 993 c --------------------------------------------------------------- 994 c Identification des mailles ou on viole le CFL : w > masse 995 c --------------------------------------------------------------- 996 997 IF (countcfl==0) THEN 998 970 999 c --------------------------------------------------------------- 971 1000 c .... calcul des termes d'advection verticale ....... 1001 c Dans le cas où le |w| < masse partout. 1002 c Version d'origine 1003 c Pourrait etre enleve si on voit que le code plus general 1004 c est aussi rapide 972 1005 c --------------------------------------------------------------- 973 1006 … … 991 1024 c$OMP END DO NOWAIT 992 1025 !write(*,*) 'vlz 1001' 1026 1027 ELSE ! countcfl>=1 1028 1029 PRINT*,'vlz passage dans le non local' 1030 c --------------------------------------------------------------- 1031 c Debut du traitement du cas ou on viole le CFL : w > masse 1032 c --------------------------------------------------------------- 1033 1034 c Initialisation 1035 1036 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1037 DO l = 2,llm 1038 DO ij = ijb,ije 1039 wresi(ij,l)=w(ij,l,iq) 1040 wq(ij,l,iq)=0. 1041 IF(w(ij,l,iq).gt.0.) THEN 1042 lorig(ij,l)=l 1043 morig(ij,l)=masse(ij,l,iq) 1044 qorig(ij,l)=q(ij,l,iq) 1045 dzqorig(ij,l)=dzq(ij,l) 1046 ELSE 1047 lorig(ij,l)=l-1 1048 morig(ij,l)=masse(ij,l-1,iq) 1049 qorig(ij,l)=q(ij,l-1,iq) 1050 dzqorig(ij,l)=dzq(ij,l-1) 1051 ENDIF 1052 ENDDO 1053 ENDDO 1054 c$OMP END DO NO WAIT 1055 1056 c Reindicage vertical en accumulant les flux sur 1057 c les mailles qui viollent le CFL 1058 c on itère jusqu'à ce que tous les poins satisfassent 1059 c le critère 1060 DO WHILE (countcfl>=1) 1061 print*,'On viole le CFL Vertical sur ',countcfl,' pts' 1062 countcfl=0 1063 1064 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1065 DO l = 2,llm 1066 DO ij = ijb,ije 1067 IF (ABS(wresi(ij,l))>morig(ij,l)) THEN 1068 countcfl=countcfl+1 1069 ! rm : les 8 lignes ci dessous pourraient sans doute s'ecrire 1070 ! avec la fonction sign 1071 IF(w(ij,l,iq)>0.) THEN 1072 wresi(ij,l)=wresi(ij,l)-morig(ij,l) 1073 wq(ij,l,iq)=wq(ij,l,iq)+morig(ij,l)*qorig(ij,l) 1074 lorig(ij,l)=lorig(ij,l)+1 1075 ELSE 1076 wresi(ij,l)=wresi(ij,l)+morig(ij,l) 1077 wq(ij,l,iq)=wq(ij,l,iq)-morig(ij,l)*qorig(ij,l) 1078 lorig(ij,l)=lorig(ij,l)-1 1079 ENDIF 1080 morig(ij,l)=masse(ij,lorig(ij,l),iq) 1081 qorig(ij,l)=q(ij,lorig(ij,l),iq) 1082 dzqorig(ij,l)=dzq(ij,lorig(ij,l)) 1083 ENDIF 1084 ENDDO 1085 ENDDO 1086 c$OMP END DO NO WAIT 1087 1088 ENDDO ! WHILE (countcfl>=1) 1089 1090 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1091 DO l = 2,llm 1092 do ij = ijb,ije 1093 sigw=wresi(ij,l)/morig(ij,l) 1094 IF(w(ij,l,iq).gt.0.) THEN 1095 wq(ij,l,iq)=wq(ij,l,iq)+wresi(ij,l)*(qorig(ij,l) 1096 : +0.5*(1.-sigw)*dzqorig(ij,l)) 1097 ELSE 1098 wq(ij,l,iq)=wq(ij,l,iq)+wresi(ij,l)*(qorig(ij,l) 1099 : -0.5*(1.+sigw)*dzqorig(ij,l)) 1100 ENDIF 1101 ENDDO 1102 ENDDO 1103 c$OMP END DO NOWAIT 1104 1105 1106 ENDIF ! councfl=0 1107 1108 993 1109 994 1110 c$OMP MASTER
Note: See TracChangeset
for help on using the changeset viewer.