Ignore:
Timestamp:
May 24, 2019 11:32:38 AM (5 years ago)
Author:
suehring
Message:

chemistry: perform basic checks only when anthropenic emissions are switched on; virtual flights: allow arbitrary start/end positions also in return mode; bugfix in 2d data output

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/virtual_flight_mod.f90

    r3885 r4004  
    2525! -----------------
    2626! $Id$
     27! Allow variable start- and end locations also in return mode
     28!
     29! 3885 2019-04-11 11:29:34Z kanani
    2730! Changes related to global restructuring of location messages and introduction
    2831! of additional debug messages
     
    601604!--          Carry out horizontal reflection if required.
    602605             IF ( .NOT. cyclic_leg(l) )  THEN
    603 !
    604 !--             Outward flight, i.e. from start to end
    605                 IF ( u_agl(l) >= 0.0_wp  .AND.  x_pos(l) > x_end(l)      )  THEN
    606                    x_pos(l) = 2.0_wp * x_end(l)   - x_pos(l)
    607                    u_agl(l) = - u_agl(l)
    608 !
    609 !--             Return flight, i.e. from end to start
    610                 ELSEIF ( u_agl(l) < 0.0_wp  .AND.  x_pos(l) < x_start(l) )  THEN
    611                    x_pos(l) = 2.0_wp * x_start(l) - x_pos(l)
    612                    u_agl(l) = - u_agl(l)
     606
     607                IF ( x_start(l) <= x_end(l) )  THEN
     608!
     609!--                Outward flight, i.e. from start to end
     610                   IF ( u_agl(l) >= 0.0_wp  .AND.  x_pos(l) > x_end(l)      )  THEN
     611                      x_pos(l) = 2.0_wp * x_end(l)   - x_pos(l)
     612                      u_agl(l) = - u_agl(l)
     613!                 
     614!--                Return flight, i.e. from end to start
     615                   ELSEIF ( u_agl(l) < 0.0_wp  .AND.  x_pos(l) < x_start(l) )  THEN
     616                      x_pos(l) = 2.0_wp * x_start(l) - x_pos(l)
     617                      u_agl(l) = - u_agl(l)
     618                   ENDIF
     619                ELSE
     620!
     621!--                Outward flight, i.e. from start to end
     622                   IF ( u_agl(l) < 0.0_wp  .AND.  x_pos(l) < x_end(l)      )  THEN
     623                      x_pos(l) = 2.0_wp * x_end(l)   - x_pos(l)
     624                      u_agl(l) = - u_agl(l)
     625!                 
     626!--                Return flight, i.e. from end to start
     627                   ELSEIF ( u_agl(l) >= 0.0_wp  .AND.  x_pos(l) > x_start(l) )  THEN
     628                      x_pos(l) = 2.0_wp * x_start(l) - x_pos(l)
     629                      u_agl(l) = - u_agl(l)
     630                   ENDIF
    613631                ENDIF
    614 !
    615 !--             Outward flight, i.e. from start to end
    616                 IF ( v_agl(l) >= 0.0_wp  .AND.  y_pos(l) > y_end(l)      )  THEN
    617                    y_pos(l) = 2.0_wp * y_end(l)   - y_pos(l)
    618                    v_agl(l) = - v_agl(l)
    619 !
    620 !--             Return flight, i.e. from end to start                 
    621                 ELSEIF ( v_agl(l) < 0.0_wp  .AND.  y_pos(l) < y_start(l) )  THEN
    622                    y_pos(l) = 2.0_wp * y_start(l) - y_pos(l)
    623                    v_agl(l) = - v_agl(l)
     632               
     633                IF ( y_start(l) <= y_end(l) )  THEN
     634!
     635!--                Outward flight, i.e. from start to end
     636                   IF ( v_agl(l) >= 0.0_wp  .AND.  y_pos(l) > y_end(l)      )  THEN
     637                      y_pos(l) = 2.0_wp * y_end(l)   - y_pos(l)
     638                      v_agl(l) = - v_agl(l)
     639!                 
     640!--                Return flight, i.e. from end to start                 
     641                   ELSEIF ( v_agl(l) < 0.0_wp  .AND.  y_pos(l) < y_start(l) )  THEN
     642                      y_pos(l) = 2.0_wp * y_start(l) - y_pos(l)
     643                      v_agl(l) = - v_agl(l)
     644                   ENDIF
     645                ELSE
     646!
     647!--                Outward flight, i.e. from start to end
     648                   IF ( v_agl(l) < 0.0_wp  .AND.  y_pos(l) < y_end(l)      )  THEN
     649                      y_pos(l) = 2.0_wp * y_end(l)   - y_pos(l)
     650                      v_agl(l) = - v_agl(l)
     651!                 
     652!--                Return flight, i.e. from end to start                 
     653                   ELSEIF ( v_agl(l) >= 0.0_wp  .AND.  y_pos(l) > y_start(l) )  THEN
     654                      y_pos(l) = 2.0_wp * y_start(l) - y_pos(l)
     655                      v_agl(l) = - v_agl(l)
     656                   ENDIF
    624657                ENDIF
    625658!
     
    924957
    925958       ENDDO         
    926 !
    927 !--    Check if start and end positions are properly set in case of return legs.
    928        DO l=1, num_leg
    929 
    930           IF ( x_start(l) > x_end(l) .AND. leg_mode(l) == 'return' )  THEN
    931              message_string = 'x_start position must be <= x_end ' //          &
    932                               'position for return legs'
    933              CALL message( 'flight_check_parameters', 'PA0436', 1, 2, 0, 6, 0 )
    934           ENDIF
    935           IF ( y_start(l) > y_end(l) .AND. leg_mode(l) == 'return' )  THEN
    936              message_string = 'y_start position must be <= y_end ' //          &
    937                               'position for return legs'
    938              CALL message( 'flight_check_parameters', 'PA0437', 1, 2, 0, 6, 0 )
    939           ENDIF
    940        ENDDO
    941959!
    942960!--    Check if given flight object remains inside model domain if a rate of
Note: See TracChangeset for help on using the changeset viewer.