Hi all !

Here's a simple Feed--->Reactor--->Product model in ASCEND.

Regards.
Shubham
(*A Simple Feed--->Reactor--->Product Flowsheet in ASCEND*)
(*Shubham Singh Tomar*)



REQUIRE "atoms.a4l";
PROVIDE "simpleflowsheet01.a4c";

(*Defining Feed Characteristics*)

MODEL mixture;

        components                      IS_A set OF symbol_constant;
        y[components]                   IS_A fraction;

        SUM[y[i] | i IN components] = 1.0;

  METHODS

    METHOD default_self;
    END default_self;

    METHOD specify;
        FIX y[components];
        FREE y[CHOICE[components]];
    END specify;

    METHOD reset;
        RUN ClearAll;
        RUN specify;
    END reset;

END mixture;

MODEL molar_stream;

        components                              IS_A set OF symbol_constant;
        state                                   IS_A mixture;
        Ftot,f[components]                      IS_A molar_rate;

        components, state.components            ARE_THE_SAME;


        FOR i IN components CREATE
            f_def[i]: f[i] = Ftot*state.y[i];
        END FOR;

  METHODS

    METHOD default_self;
    END default_self;

    METHOD seqmod;
        RUN state.specify;
        FREE state.y[components];
    END seqmod;

    METHOD specify;
        RUN seqmod;
        FIX f[components];
    END specify;

    METHOD reset;
        RUN ClearAll;
        RUN specify;
    END reset;

    METHOD scale;
        FOR i IN components DO
          f[i].nominal := f[i] + 0.1{mol/s};
        END FOR;
        Ftot.nominal := Ftot + 0.1{mol/s};
    END scale;

END molar_stream;

MODEL mixer;

        n_inputs                IS_A            integer_constant;
        feed[1..n_inputs], out  IS_A            molar_stream;

        feed[1..n_inputs].components,
        out.components                          ARE_THE_SAME;

        FOR i IN out.components CREATE
          cmb[i]: out.f[i] = SUM[feed[1..n_inputs].f[i]];
        END FOR;

  METHODS

    METHOD default_self;
    END default_self;

    METHOD seqmod;
    END seqmod;

    METHOD specify;
        RUN seqmod;
        RUN feed[1..n_inputs].specify;
    END specify;

    METHOD reset;
        RUN ClearAll;
        RUN specify;
    END reset;

    METHOD scale;
        RUN feed[1..n_inputs].scale;
        RUN out.scale;
    END scale;

END mixer;

(*Reactor*)

MODEL reactor;

        feed, out                       IS_A            molar_stream;
        feed.components, out.components                 ARE_THE_SAME;

        turnover                        IS_A            molar_rate;
        stoich_coef[feed.components]    IS_A            factor;

        FOR i IN feed.components CREATE
                out.f[i] = feed.f[i] + stoich_coef[i]*turnover;
        END FOR;

  METHODS

    METHOD default_self;
    END default_self;

    METHOD seqmod;
        FIX turnover;
        FIX stoich_coef[feed.components];
    END seqmod;

    METHOD specify;
        RUN seqmod;
        RUN feed.specify;
    END specify;

    METHOD reset;
        RUN ClearAll;
        RUN specify;
    END reset;

    METHOD scale;
        RUN feed.scale;
        RUN out.scale;
        turnover.nominal := turnover.nominal+0.0001 {kg_mole/s};
    END scale;

END reactor;

(*Test model, Product*)

MODEL test_flowsheet REFINES flowsheet;

        m1.out.components                       :==     ['A','B','C'];

  METHODS

    METHOD default_self;
        (* no-op. here to avoid STOP statement. *)
    END default_self;
    
    METHOD values;
        m1.feed[1].f['A']               :=      0.010  {kg_mole/s};
        m1.feed[1].f['B']               :=      0.080 {kg_mole/s};
        m1.feed[1].f['C']               :=      0.010  {kg_mole/s};

        r1.stoich_coef['A']             :=      0;
        r1.stoich_coef['B']             :=      -1;
        r1.stoich_coef['C']             :=      1;

        fl1.alpha['A']                  :=      12.0;
        fl1.alpha['B']                  :=      10.0;
        fl1.alpha['C']                  :=      1.0;
        fl1.vap_to_feed_ratio           :=      0.9;
        fl1.ave_alpha                   :=      5.0;

        sp1.split[1]                    :=      0.01;

        fl1.liq.Ftot                    :=      m1.feed[1].f['B'];
    END values;

END test_flowsheet;



------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
Ascend-sim-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ascend-sim-users

Reply via email to