! ! $Id: fluxstokenc.f90 5285 2024-10-28 13:33:29Z abarral $ ! SUBROUTINE fluxstokenc(pbaru,pbarv,masse,teta,phi,phis, & time_step,itau ) ! This routine is designed to work with ioipsl USE iniprint_mod_h USE comgeom_mod_h USE IOIPSL ! ! Auteur : F. Hourdin ! ! !cc .. Modif. P. Le Van ( 20/12/97 ) ... ! USE tracstoke_mod_h USE dimensions_mod, ONLY: iim, jjm, llm, ndm USE paramet_mod_h IMPLICIT NONE ! REAL :: time_step,t_wrt, t_ops REAL :: pbaru(ip1jmp1,llm),pbarv(ip1jm,llm) REAL :: masse(ip1jmp1,llm),teta(ip1jmp1,llm),phi(ip1jmp1,llm) REAL :: phis(ip1jmp1) REAL :: pbaruc(ip1jmp1,llm),pbarvc(ip1jm,llm) REAL :: massem(ip1jmp1,llm),tetac(ip1jmp1,llm),phic(ip1jmp1,llm) REAL :: pbarug(ip1jmp1,llm),pbarvg(iip1,jjm,llm),wg(ip1jmp1,llm) REAL :: pbarvst(iip1,jjp1,llm),zistdyn real :: dtcum INTEGER :: iadvtr,ndex(1) integer :: nscal real :: tst(1),ist(1),istp(1) INTEGER :: ij,l,irec,i,j,itau INTEGER, SAVE :: fluxid, fluxvid,fluxdid SAVE iadvtr, massem,pbaruc,pbarvc,irec SAVE phic,tetac logical :: first save first data first/.true./ DATA iadvtr/0/ ! AC initialisations pbarug(:,:) = 0. pbarvg(:,:,:) = 0. wg(:,:) = 0. if(first) then CALL initfluxsto( 'fluxstoke', & time_step,istdyn* time_step,istdyn* time_step, & fluxid,fluxvid,fluxdid) ndex(1) = 0 call histwrite(fluxid, 'phis', 1, phis, iip1*jjp1, ndex) call histwrite(fluxid, 'aire', 1, aire, iip1*jjp1, ndex) ndex(1) = 0 nscal = 1 tst(1) = time_step call histwrite(fluxdid, 'dtvr', 1, tst, nscal, ndex) ist(1)=istdyn call histwrite(fluxdid, 'istdyn', 1, ist, nscal, ndex) istp(1)= istphy call histwrite(fluxdid, 'istphy', 1, istp, nscal, ndex) first = .false. endif IF(iadvtr.EQ.0) THEN phic(:,:)=0 tetac(:,:)=0 pbaruc(:,:)=0 pbarvc(:,:)=0 ENDIF ! accumulation des flux de masse horizontaux DO l=1,llm DO ij = 1,ip1jmp1 pbaruc(ij,l) = pbaruc(ij,l) + pbaru(ij,l) tetac(ij,l) = tetac(ij,l) + teta(ij,l) phic(ij,l) = phic(ij,l) + phi(ij,l) ENDDO DO ij = 1,ip1jm pbarvc(ij,l) = pbarvc(ij,l) + pbarv(ij,l) ENDDO ENDDO ! selection de la masse instantannee des mailles avant le transport. IF(iadvtr.EQ.0) THEN CALL SCOPY(ip1jmp1*llm,masse,1,massem,1) ENDIF iadvtr = iadvtr+1 ! Test pour savoir si on advecte a ce pas de temps IF ( iadvtr.EQ.istdyn ) THEN ! normalisation DO l=1,llm DO ij = 1,ip1jmp1 pbaruc(ij,l) = pbaruc(ij,l)/REAL(istdyn) tetac(ij,l) = tetac(ij,l)/REAL(istdyn) phic(ij,l) = phic(ij,l)/REAL(istdyn) ENDDO DO ij = 1,ip1jm pbarvc(ij,l) = pbarvc(ij,l)/REAL(istdyn) ENDDO ENDDO ! traitement des flux de masse avant advection. ! 1. calcul de w ! 2. groupement des mailles pres du pole. CALL groupe( massem, pbaruc,pbarvc, pbarug,pbarvg,wg ) do l=1,llm do j=1,jjm do i=1,iip1 pbarvst(i,j,l)=pbarvg(i,j,l) enddo enddo do i=1,iip1 pbarvst(i,jjp1,l)=0. enddo enddo iadvtr=0 write(lunout,*)'ITAU auquel on stoke les fluxmasses',itau call histwrite(fluxid, 'masse', itau, massem, & iip1*jjp1*llm, ndex) call histwrite(fluxid, 'pbaru', itau, pbarug, & iip1*jjp1*llm, ndex) call histwrite(fluxvid, 'pbarv', itau, pbarvg, & iip1*jjm*llm, ndex) call histwrite(fluxid, 'w' ,itau, wg, & iip1*jjp1*llm, ndex) call histwrite(fluxid, 'teta' ,itau, tetac, & iip1*jjp1*llm, ndex) call histwrite(fluxid, 'phi' ,itau, phic, & iip1*jjp1*llm, ndex) ! ENDIF ! if iadvtr.EQ.istdyn RETURN END SUBROUTINE fluxstokenc