Ignore:
Timestamp:
Sep 14, 2000, 6:28:55 PM (24 years ago)
Author:
lmdzadmin
Message:

Regle un probleme de synchro dans la lecture/ecriture des champs
envoyes/recus du coupleur
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ.3.3/branches/rel-LF/libf/phylmd/interface_surf.F90

    r137 r138  
    813813! 1ere lecture champs ocean
    814814!
    815     if (nisurf == is_oce) then
    816       call fromcpl(itime,(jjm+1)*iim,                                  &
    817      &        read_sst, read_sic, read_sit, read_alb_sic)
     815!    if (nisurf == is_oce) then
     816!      call fromcpl(itime - 1,(jjm+1)*iim,                                  &
     817!     &        read_sst, read_sic, read_sit, read_alb_sic)
    818818!
    819819! je voulais utiliser des where mais ca ne voulait pas compiler dans un
    820820! if construct sur sun
    821821!
    822       do j = 1, jjm + 1
    823         do ig = 1, iim
    824           if (abs(1. - read_sic(ig,j)) < 0.00001) then
    825             read_sst(ig,j) = RTT - 1.8
    826             read_sit(ig,j) = read_sit(ig,j) / read_sic(ig,j)
    827             read_alb_sic(ig,j) = read_alb_sic(ig,j) / read_sic(ig,j)
    828           else if (abs(read_sic(ig,j)) < 0.00001) then
    829             read_sst(ig,j) = read_sst(ig,j) / (1. - read_sic(ig,j))
    830             read_sit(ig,j) = read_sst(ig,j)
    831             read_alb_sic(ig,j) =  0.6
    832           else
    833             read_sst(ig,j) = read_sst(ig,j) / (1. - read_sic(ig,j))
    834             read_sit(ig,j) = read_sit(ig,j) / read_sic(ig,j)
    835             read_alb_sic(ig,j) = read_alb_sic(ig,j) / read_sic(ig,j)
    836           endif
    837         enddo
    838       enddo
    839     endif
     822!      do j = 1, jjm + 1
     823!        do ig = 1, iim
     824!          if (abs(1. - read_sic(ig,j)) < 0.00001) then
     825!            read_sst(ig,j) = RTT - 1.8
     826!            read_sit(ig,j) = read_sit(ig,j) / read_sic(ig,j)
     827!            read_alb_sic(ig,j) = read_alb_sic(ig,j) / read_sic(ig,j)
     828!          else if (abs(read_sic(ig,j)) < 0.00001) then
     829!            read_sst(ig,j) = read_sst(ig,j) / (1. - read_sic(ig,j))
     830!            read_sit(ig,j) = read_sst(ig,j)
     831!            read_alb_sic(ig,j) =  0.6
     832!          else
     833!            read_sst(ig,j) = read_sst(ig,j) / (1. - read_sic(ig,j))
     834!            read_sit(ig,j) = read_sit(ig,j) / read_sic(ig,j)
     835!            read_alb_sic(ig,j) = read_alb_sic(ig,j) / read_sic(ig,j)
     836!          endif
     837!        enddo
     838!      enddo
     839!    endif
    840840
    841841    first_appel = .false.
     
    859859  cpl_rcoa(:,nisurf) = cpl_rcoa(:,nisurf) + run_off     / FLOAT(nexca)/dtime
    860860
    861   if (mod(itime, nexca) == 0) then
    862 !
    863 ! Mise sur la bonne grille des champs a passer au coupleur
    864 !
    865 ! allocation memoire
    866     sum_error = 0
    867     allocate(tmp_sols(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    868     allocate(tmp_nsol(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    869     allocate(tmp_rain(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    870     allocate(tmp_snow(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    871     allocate(tmp_evap(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    872     allocate(tmp_tsol(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    873     allocate(tmp_fder(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    874     allocate(tmp_albe(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    875     allocate(tmp_taux(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    876     allocate(tmp_tauy(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    877     allocate(tmp_rriv(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    878     allocate(tmp_rcoa(iim,jjm+1,2), stat=error); sum_error = sum_error + error
    879     if (sum_error /= 0) then
    880       abort_message='Pb allocation variables couplees'
    881       call abort_gcm(modname,abort_message,1)
    882     endif
    883 
    884     call gath2cpl(cpl_sols(1,nisurf), tmp_sols(1,1,nisurf), klon, knon,iim,jjm, knindex)
    885     call gath2cpl(cpl_nsol(1,nisurf), tmp_nsol(1,1,nisurf), klon, knon,iim,jjm, knindex)
    886     call gath2cpl(cpl_rain(1,nisurf), tmp_rain(1,1,nisurf), klon, knon,iim,jjm, knindex)
    887     call gath2cpl(cpl_snow(1,nisurf), tmp_snow(1,1,nisurf), klon, knon,iim,jjm, knindex)
    888     call gath2cpl(cpl_evap(1,nisurf), tmp_evap(1,1,nisurf), klon, knon,iim,jjm, knindex)
    889     call gath2cpl(cpl_tsol(1,nisurf), tmp_tsol(1,1,nisurf), klon, knon,iim,jjm, knindex)
    890     call gath2cpl(cpl_fder(1,nisurf), tmp_fder(1,1,nisurf), klon, knon,iim,jjm, knindex)
    891     call gath2cpl(cpl_albe(1,nisurf), tmp_albe(1,1,nisurf), klon, knon,iim,jjm, knindex)
    892     call gath2cpl(cpl_taux(1,nisurf), tmp_taux(1,1,nisurf), klon, knon,iim,jjm, knindex)
    893     call gath2cpl(cpl_tauy(1,nisurf), tmp_tauy(1,1,nisurf), klon, knon,iim,jjm, knindex)
    894     call gath2cpl(cpl_rriv(1,nisurf), tmp_rriv(1,1,nisurf), klon, knon,iim,jjm, knindex)
    895     call gath2cpl(cpl_rcoa(1,nisurf), tmp_rcoa(1,1,nisurf), klon, knon,iim,jjm, knindex)
    896 !
    897 ! Passage des champs au/du coupleur
     861  if (mod(itime, nexca) == 1) then
     862!
     863! Passage des champs au coupleur
    898864!
    899865! Si le domaine considere est l'ocean, on lit les champs venant du coupleur
    900866!
    901867    if (nisurf == is_oce) then
    902       call fromcpl(itime,(jjm+1)*iim,                                  &
     868      call fromcpl(itime-1,(jjm+1)*iim,                                  &
    903869     &        read_sst, read_sic, read_sit, read_alb_sic)
    904870      do j = 1, jjm + 1
     
    920886      enddo
    921887    endif
     888  endif                         ! fin mod(itime, nexca) == 1
     889
     890  if (mod(itime, nexca) == 0) then
     891!
     892! allocation memoire
     893    sum_error = 0
     894    allocate(tmp_sols(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     895    allocate(tmp_nsol(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     896    allocate(tmp_rain(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     897    allocate(tmp_snow(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     898    allocate(tmp_evap(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     899    allocate(tmp_tsol(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     900    allocate(tmp_fder(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     901    allocate(tmp_albe(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     902    allocate(tmp_taux(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     903    allocate(tmp_tauy(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     904    allocate(tmp_rriv(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     905    allocate(tmp_rcoa(iim,jjm+1,2), stat=error); sum_error = sum_error + error
     906    if (sum_error /= 0) then
     907      abort_message='Pb allocation variables couplees'
     908      call abort_gcm(modname,abort_message,1)
     909    endif
     910
     911!
     912! Mise sur la bonne grille des champs a passer au coupleur
     913!
     914    call gath2cpl(cpl_sols(1,nisurf), tmp_sols(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     915    call gath2cpl(cpl_nsol(1,nisurf), tmp_nsol(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     916    call gath2cpl(cpl_rain(1,nisurf), tmp_rain(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     917    call gath2cpl(cpl_snow(1,nisurf), tmp_snow(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     918    call gath2cpl(cpl_evap(1,nisurf), tmp_evap(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     919    call gath2cpl(cpl_tsol(1,nisurf), tmp_tsol(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     920    call gath2cpl(cpl_fder(1,nisurf), tmp_fder(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     921    call gath2cpl(cpl_albe(1,nisurf), tmp_albe(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     922    call gath2cpl(cpl_taux(1,nisurf), tmp_taux(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     923    call gath2cpl(cpl_tauy(1,nisurf), tmp_tauy(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     924    call gath2cpl(cpl_rriv(1,nisurf), tmp_rriv(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     925    call gath2cpl(cpl_rcoa(1,nisurf), tmp_rcoa(1,1,nisurf), klon, knon,iim,jjm,                  knindex)
     926
    922927!
    923928! Si le domaine considere est la banquise, on envoie les champs au coupleur
     
    982987    endif
    983988
    984   endif            ! fin nexca
     989  endif            ! fin (mod(itime, nexca) == 0)
    985990!
    986991! on range les variables lues/sauvegardees dans les bonnes variables de sortie
Note: See TracChangeset for help on using the changeset viewer.