/[ascend]/trunk/models/collocation.a4l
ViewVC logotype

Diff of /trunk/models/collocation.a4l

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by aw0a, Fri Oct 29 20:54:12 2004 UTC revision 576 by johnpye, Tue May 9 03:42:08 2006 UTC
# Line 206  METHOD seqmod; Line 206  METHOD seqmod;
206      RUN liqout.seqmod;      RUN liqout.seqmod;
207      RUN distillate.seqmod;      RUN distillate.seqmod;
208      RUN vapin.seqmod;      RUN vapin.seqmod;
209      reflux_ratio.fixed := TRUE;      FIX reflux_ratio;
210      liqout.T.fixed := FALSE;      FREE liqout.T;
211      liqout.P.fixed := FALSE;      FREE liqout.P;
212  END seqmod;  END seqmod;
213    
214  METHOD specify;  METHOD specify;
# Line 370  METHOD check_all; Line 370  METHOD check_all;
370  END check_all;  END check_all;
371    
372  METHOD specify;  METHOD specify;
373      w_points[0..npoints].fixed  := TRUE;      FIX w_points[0..npoints];
374      f_int.fixed             := TRUE;      FIX f_int;
375      f_mid.fixed         := TRUE;      FIX f_mid;
376      mult[1..ntrays].fixed       := TRUE;      FIX mult[1..ntrays];
377  END specify;  END specify;
378  METHOD reset;  METHOD reset;
379      RUN ClearAll;      RUN ClearAll;
# Line 436  METHOD check_all; Line 436  METHOD check_all;
436  END check_all;  END check_all;
437    
438  METHOD seqmod;  METHOD seqmod;
439      a.fixed                 := TRUE;      FIX a;
440      s.fixed                 := TRUE;      FIX s;
441  END seqmod;  END seqmod;
442  METHOD specify;  METHOD specify;
443      RUN seqmod;      RUN seqmod;
# Line 448  METHOD reset; Line 448  METHOD reset;
448  END reset;  END reset;
449  METHOD s_off;  METHOD s_off;
450      s_def.included              := FALSE;      s_def.included              := FALSE;
451      s.fixed                 := TRUE;      FIX s;
452  END s_off;  END s_off;
453    
454  END collpoint;  END collpoint;
# Line 611  END check_all; Line 611  END check_all;
611    
612  METHOD specify;  METHOD specify;
613      RUN lgr.specify;      RUN lgr.specify;
614      lgr.w_points[0..lgr.npoints].fixed  := FALSE;      FREE lgr.w_points[0..lgr.npoints];
615      a.fixed                 := TRUE;      FIX a;
616      s_values[0].fixed           := TRUE;      FIX s_values[0];
617      stot.fixed              := TRUE;      FIX stot;
618  END specify;  END specify;
619  METHOD reset;  METHOD reset;
620      RUN ClearAll;      RUN ClearAll;
# Line 655  MODEL coll_material_detailed_stream( Line 655  MODEL coll_material_detailed_stream(
655  METHODS  METHODS
656  METHOD specify;  METHOD specify;
657      RUN detailed_stream::specify;      RUN detailed_stream::specify;
658      state.H.fixed := TRUE;      FIX state.H;
659  END specify;  END specify;
660  END coll_material_detailed_stream;  END coll_material_detailed_stream;
661    
# Line 688  MODEL coll_material_stream( Line 688  MODEL coll_material_stream(
688  METHODS  METHODS
689  METHOD specify;  METHOD specify;
690      RUN stream::specify;      RUN stream::specify;
691      state.H.fixed := TRUE;      FIX state.H;
692  END specify;  END specify;
693  END coll_material_stream;  END coll_material_stream;
694    
# Line 1319  METHOD seqmod_massbal; Line 1319  METHOD seqmod_massbal;
1319      equilibrated := FALSE;      equilibrated := FALSE;
1320      use_H_eqns := hb_on OR equilibrated;      use_H_eqns := hb_on OR equilibrated;
1321    
1322      cmo[1..ntrays].fixed                := TRUE;      FIX cmo[1..ntrays];
1323      cmotot.fixed                    := TRUE;      FIX cmotot;
1324    
1325      RUN tray[1..ntrays].seqmod_massbal;      RUN tray[1..ntrays].seqmod_massbal;
1326      RUN z_set.specify;      RUN z_set.specify;
# Line 1332  METHOD seqmod_massbal; Line 1332  METHOD seqmod_massbal;
1332    
1333      RUN CMO;      RUN CMO;
1334    
1335      topvap.state.H.fixed := TRUE;      FIX topvap.state.H;
1336      botliq.state.H.fixed := TRUE;      FIX botliq.state.H;
1337    
1338      liqin_state[1..ntrays].H.fixed := TRUE;      FIX liqin_state[1..ntrays].H;
1339      tray[1..ntrays].Qin.fixed := TRUE;      FIX tray[1..ntrays].Qin;
1340      s_shift.fixed := FALSE;      FREE s_shift;
1341      z_shift.fixed := FALSE;      FREE z_shift;
1342  END seqmod_massbal;  END seqmod_massbal;
1343    
1344  METHOD seqmod_fullthermo;  METHOD seqmod_fullthermo;
# Line 1346  METHOD seqmod_fullthermo; Line 1346  METHOD seqmod_fullthermo;
1346      equilibrated := TRUE;      equilibrated := TRUE;
1347      use_H_eqns := hb_on OR equilibrated;      use_H_eqns := hb_on OR equilibrated;
1348    
1349      cmo[1..ntrays].fixed                := TRUE;      FIX cmo[1..ntrays];
1350      cmotot.fixed                    := TRUE;      FIX cmotot;
1351      RUN tray[1..ntrays].seqmod_fullthermo;      RUN tray[1..ntrays].seqmod_fullthermo;
1352      RUN z_set.specify;      RUN z_set.specify;
1353    
# Line 1358  METHOD seqmod_fullthermo; Line 1358  METHOD seqmod_fullthermo;
1358    
1359      RUN CMO;      RUN CMO;
1360    
1361      topliq.state.T.fixed := FALSE;      FREE topliq.state.T;
1362      botvap.state.T.fixed := FALSE;      FREE botvap.state.T;
1363      topvap.state.T.fixed := FALSE;      FREE topvap.state.T;
1364      botliq.state.T.fixed := FALSE;      FREE botliq.state.T;
1365    
1366    
1367      topliq.state.H.fixed := FALSE;      FREE topliq.state.H;
1368      botvap.state.H.fixed := FALSE;      FREE botvap.state.H;
1369      topvap.state.H.fixed := FALSE;      FREE topvap.state.H;
1370      botliq.state.H.fixed := FALSE;      FREE botliq.state.H;
1371    
1372      s_shift.fixed := FALSE;      FREE s_shift;
1373      z_shift.fixed := FALSE;      FREE z_shift;
1374  END seqmod_fullthermo;  END seqmod_fullthermo;
1375    
1376  METHOD seqmod_adiabatic;  METHOD seqmod_adiabatic;
# Line 1379  METHOD seqmod_adiabatic; Line 1379  METHOD seqmod_adiabatic;
1379      use_H_eqns := hb_on OR equilibrated;      use_H_eqns := hb_on OR equilibrated;
1380      RUN seqmod_fullthermo;      RUN seqmod_fullthermo;
1381      RUN heat_balance;      RUN heat_balance;
1382      s_shift.fixed := FALSE;      FREE s_shift;
1383      z_shift.fixed := FALSE;      FREE z_shift;
1384  END seqmod_adiabatic;  END seqmod_adiabatic;
1385    
1386  METHOD heat_balance;  METHOD heat_balance;
1387      hb_on                           := TRUE;      hb_on                           := TRUE;
1388      RUN tray[1..ntrays].heat_balance;      RUN tray[1..ntrays].heat_balance;
1389      Qtot.fixed                      := TRUE;      FIX Qtot;
1390      cmotot.fixed                        := FALSE;      FREE cmotot;
1391      Qin[1..ntrays].fixed                    := TRUE;      FIX Qin[1..ntrays];
1392      cmo[1..ntrays].fixed                    := FALSE;      FREE cmo[1..ntrays];
1393  END heat_balance;  END heat_balance;
1394  METHOD CMO;  METHOD CMO;
1395      hb_on                           := FALSE;      hb_on                           := FALSE;
1396      tray[1..ntrays].cmo_ratio.fixed         := TRUE;      FIX tray[1..ntrays].cmo_ratio;
1397      tray[1..ntrays].Qin.fixed               := FALSE;      FREE tray[1..ntrays].Qin;
1398      Qtot.fixed                      := FALSE;      FREE Qtot;
1399      cmotot.fixed                        := TRUE;      FIX cmotot;
1400      Qin[1..ntrays].fixed                    := FALSE;      FREE Qin[1..ntrays];
1401      cmo[1..ntrays].fixed                    := TRUE;      FIX cmo[1..ntrays];
1402  END CMO;  END CMO;
1403  METHOD specify;  METHOD specify;
1404      IF (hb_on AND NOT(equilibrated)) THEN      IF (hb_on AND NOT(equilibrated)) THEN
# Line 1416  METHOD specify; Line 1416  METHOD specify;
1416    
1417      RUN topliq.specify;      RUN topliq.specify;
1418      RUN botvap.specify;      RUN botvap.specify;
1419      s_shift.fixed := TRUE;      FIX s_shift;
1420      z_shift.fixed := TRUE;      FIX z_shift;
1421  END specify;  END specify;
1422  METHOD reset;  METHOD reset;
1423      RUN ClearAll;      RUN ClearAll;
# Line 1872  METHOD seqmod_massbal; Line 1872  METHOD seqmod_massbal;
1872      equilibrated := FALSE;      equilibrated := FALSE;
1873      RUN coll[1..ncolls].seqmod_massbal;      RUN coll[1..ncolls].seqmod_massbal;
1874      FOR j IN [1..ncolls] DO      FOR j IN [1..ncolls] DO
1875      (*coll[j].botliq.state.H.fixed := FALSE;*)      (*FREE coll[j].botliq.state.H;*)
1876    
1877      coll[j].z_set      coll[j].z_set
1878      .z_values[coll[j].ntrays+1].fixed   := FALSE;      .FREE z_values[coll[j].ntrays+1];
1879      coll[j].z_set.stot.fixed            := FALSE;      FREE coll[j].z_set.stot;
1880      END FOR;      END FOR;
1881      stot.fixed                  := TRUE;      FIX stot;
1882      split[1..ncolls-1].fixed            := TRUE;      FIX split[1..ncolls-1];
1883      IF (hb_on) THEN      IF (hb_on) THEN
1884      RUN heat_balance;      RUN heat_balance;
1885      END IF;      END IF;
1886      z_shift.fixed := FALSE;      FREE z_shift;
1887      s_shift.fixed := FALSE;      FREE s_shift;
1888  END seqmod_massbal;  END seqmod_massbal;
1889    
1890  METHOD seqmod_fullthermo;  METHOD seqmod_fullthermo;
# Line 1892  METHOD seqmod_fullthermo; Line 1892  METHOD seqmod_fullthermo;
1892      equilibrated := TRUE;      equilibrated := TRUE;
1893      RUN coll[1..ncolls].seqmod_fullthermo;      RUN coll[1..ncolls].seqmod_fullthermo;
1894      FOR j IN [1..ncolls] DO      FOR j IN [1..ncolls] DO
1895      (*coll[j].botliq.state.H.fixed := FALSE;*)      (*FREE coll[j].botliq.state.H;*)
1896    
1897      coll[j].z_set      coll[j].z_set
1898      .z_values[coll[j].ntrays+1].fixed   := FALSE;      .FREE z_values[coll[j].ntrays+1];
1899      coll[j].z_set.stot.fixed            := FALSE;      FREE coll[j].z_set.stot;
1900      END FOR;      END FOR;
1901      stot.fixed                  := TRUE;      FIX stot;
1902      split[1..ncolls-1].fixed            := TRUE;      FIX split[1..ncolls-1];
1903      IF (hb_on) THEN      IF (hb_on) THEN
1904      RUN heat_balance;      RUN heat_balance;
1905      END IF;      END IF;
1906    
1907      z_shift.fixed := FALSE;      FREE z_shift;
1908      s_shift.fixed := FALSE;      FREE s_shift;
1909  END seqmod_fullthermo;  END seqmod_fullthermo;
1910    
1911  METHOD seqmod_adiabatic;  METHOD seqmod_adiabatic;
# Line 1913  METHOD seqmod_adiabatic; Line 1913  METHOD seqmod_adiabatic;
1913      equilibrated := TRUE;      equilibrated := TRUE;
1914      RUN coll[1..ncolls].seqmod_adiabatic;      RUN coll[1..ncolls].seqmod_adiabatic;
1915      FOR j IN [1..ncolls] DO      FOR j IN [1..ncolls] DO
1916      (*coll[j].botliq.state.H.fixed := FALSE;*)      (*FREE coll[j].botliq.state.H;*)
1917    
1918      coll[j].z_set      coll[j].z_set
1919      .z_values[coll[j].ntrays+1].fixed   := FALSE;      .FREE z_values[coll[j].ntrays+1];
1920      coll[j].z_set.stot.fixed            := FALSE;      FREE coll[j].z_set.stot;
1921      END FOR;      END FOR;
1922      stot.fixed                  := TRUE;      FIX stot;
1923      split[1..ncolls-1].fixed            := TRUE;      FIX split[1..ncolls-1];
1924      IF (hb_on) THEN      IF (hb_on) THEN
1925      RUN heat_balance;      RUN heat_balance;
1926      END IF;      END IF;
1927    
1928      z_shift.fixed := FALSE;      FREE z_shift;
1929      s_shift.fixed := FALSE;      FREE s_shift;
1930  END seqmod_adiabatic;  END seqmod_adiabatic;
1931    
1932    
# Line 1945  METHOD specify; Line 1945  METHOD specify;
1945      END IF;      END IF;
1946      RUN coll[1].topliq.specify;      RUN coll[1].topliq.specify;
1947      RUN coll[ncolls].botvap.specify;      RUN coll[ncolls].botvap.specify;
1948      z_shift.fixed := TRUE;      FIX z_shift;
1949      s_shift.fixed := TRUE;      FIX s_shift;
1950  END specify;  END specify;
1951  METHOD reset;  METHOD reset;
1952      RUN ClearAll;      RUN ClearAll;
# Line 2373  METHOD default_self; Line 2373  METHOD default_self;
2373      hb_on := FALSE;      hb_on := FALSE;
2374      equilibrated := FALSE;      equilibrated := FALSE;
2375      do_cost_calc := FALSE;      do_cost_calc := FALSE;
2376      objmult.fixed := TRUE;      FIX objmult;
2377      objmult := 10000;      objmult := 10000;
2378      optime.fixed := TRUE;      FIX optime;
2379      optime := 1.0;      optime := 1.0;
2380      split[1..nfeeds+1] := 1.0/(nfeeds+1);      split[1..nfeeds+1] := 1.0/(nfeeds+1);
2381    
2382      z_shift.fixed := TRUE;      FIX z_shift;
2383      s_shift.fixed := TRUE;      FIX s_shift;
2384      z_shift := 0;      z_shift := 0;
2385      s_shift := 0;      s_shift := 0;
2386      z_space := 0.1;      z_space := 0.1;
# Line 2480  END check_all; Line 2480  END check_all;
2480    
2481      METHOD heat_balance;      METHOD heat_balance;
2482      RUN coll_stack[1..nfeeds+1].heat_balance;      RUN coll_stack[1..nfeeds+1].heat_balance;
2483      feed_tray.q.fixed := FALSE;      FREE feed_tray.q;
2484      feed_tray.Qin.fixed := TRUE;      FIX feed_tray.Qin;
2485      hb_on := TRUE;      hb_on := TRUE;
2486       END heat_balance;       END heat_balance;
2487       METHOD CMO;       METHOD CMO;
2488       RUN coll_stack[1..nfeeds+1].CMO;       RUN coll_stack[1..nfeeds+1].CMO;
2489       feed_tray[1..nfeeds].q.fixed := TRUE;       FIX feed_tray[1..nfeeds].q;
2490       feed_tray[1..nfeeds].Qin.fixed := FALSE;       FREE feed_tray[1..nfeeds].Qin;
2491       hb_on := FALSE;       hb_on := FALSE;
2492       END CMO;       END CMO;
2493       METHOD reduce_Q;       METHOD reduce_Q;
# Line 2519  END check_all; Line 2519  END check_all;
2519           IF (equilibrated == TRUE) THEN           IF (equilibrated == TRUE) THEN
2520           IF (saturated_liquid_feed == TRUE) THEN           IF (saturated_liquid_feed == TRUE) THEN
2521               saturated_vapor_feed := FALSE;               saturated_vapor_feed := FALSE;
2522               feed.T.fixed := FALSE;               FREE feed.T;
2523               feed.state.phase_fraction['vapor'].fixed := TRUE;               FIX feed.state.phase_fraction['vapor'];
2524               feed.state.phase_fraction['vapor'] := 0.0;               feed.state.phase_fraction['vapor'] := 0.0;
2525           END IF;           END IF;
2526           IF (saturated_vapor_feed == TRUE) THEN           IF (saturated_vapor_feed == TRUE) THEN
2527               feed.T.fixed := FALSE;               FREE feed.T;
2528               feed.state.phase_fraction['vapor'].fixed := TRUE;               FIX feed.state.phase_fraction['vapor'];
2529               feed.state.phase_fraction['vapor'] := 1.0;               feed.state.phase_fraction['vapor'] := 1.0;
2530           END IF;           END IF;
2531           END IF;           END IF;
# Line 2539  END check_all; Line 2539  END check_all;
2539      RUN feed_tray.seqmod;      RUN feed_tray.seqmod;
2540      RUN reboiler.seqmod;      RUN reboiler.seqmod;
2541      OverallMB[components].included          := FALSE;      OverallMB[components].included          := FALSE;
2542      reboiler.reboil_ratio.fixed             := FALSE;      FREE reboiler.reboil_ratio;
2543      condenser.distillate.flow.fixed         := TRUE;      FIX condenser.distillate.flow;
2544      xsi_set[components].fixed           := TRUE;      FIX xsi_set[components];
2545      IF (hb_on) THEN      IF (hb_on) THEN
2546          RUN heat_balance;          RUN heat_balance;
2547      END IF;      END IF;
2548      recovery.included               := FALSE;      recovery.included               := FALSE;
2549      sep_opt[components][components].included    := FALSE;      sep_opt[components][components].included    := FALSE;
2550      z_space.fixed                   := TRUE;      FIX z_space;
2551      s_shift.fixed                   := TRUE;      FIX s_shift;
2552      z_shift.fixed                   := TRUE;      FIX z_shift;
2553       END seqmod;       END seqmod;
2554    
2555       METHOD seqmod_massbal;       METHOD seqmod_massbal;
2556          objmult.fixed := TRUE;          FIX objmult;
2557          optime.fixed := TRUE;          FIX optime;
2558      hb_on := FALSE;      hb_on := FALSE;
2559      equilibrated := FALSE;      equilibrated := FALSE;
2560    
# Line 2564  END check_all; Line 2564  END check_all;
2564      RUN feed_tray.seqmod_massbal;      RUN feed_tray.seqmod_massbal;
2565      RUN reboiler.seqmod;      RUN reboiler.seqmod;
2566      OverallMB[components].included          := FALSE;      OverallMB[components].included          := FALSE;
2567      reboiler.reboil_ratio.fixed             := FALSE;      FREE reboiler.reboil_ratio;
2568      condenser.distillate.flow.fixed         := TRUE;      FIX condenser.distillate.flow;
2569      xsi_set[components].fixed           := TRUE;      FIX xsi_set[components];
2570      recovery.included               := FALSE;      recovery.included               := FALSE;
2571      sep_opt[components][components].included    := FALSE;      sep_opt[components][components].included    := FALSE;
2572    
2573      z_space.fixed                   := TRUE;      FIX z_space;
2574      s_shift.fixed                   := TRUE;      FIX s_shift;
2575      z_shift.fixed                   := TRUE;      FIX z_shift;
2576    
2577       END seqmod_massbal;       END seqmod_massbal;
2578    
2579      METHOD seqmod_fullthermo;      METHOD seqmod_fullthermo;
2580          objmult.fixed := TRUE;          FIX objmult;
2581          optime.fixed := TRUE;          FIX optime;
2582      hb_on := FALSE;      hb_on := FALSE;
2583      equilibrated := TRUE;      equilibrated := TRUE;
2584    
# Line 2588  END check_all; Line 2588  END check_all;
2588      RUN feed_tray.seqmod_fullthermo;      RUN feed_tray.seqmod_fullthermo;
2589      RUN reboiler.seqmod;      RUN reboiler.seqmod;
2590      OverallMB[components].included          := FALSE;      OverallMB[components].included          := FALSE;
2591      reboiler.reboil_ratio.fixed             := FALSE;      FREE reboiler.reboil_ratio;
2592      condenser.distillate.flow.fixed         := TRUE;      FIX condenser.distillate.flow;
2593      xsi_set[components].fixed           := TRUE;      FIX xsi_set[components];
2594      recovery.included               := FALSE;      recovery.included               := FALSE;
2595      sep_opt[components][components].included    := FALSE;      sep_opt[components][components].included    := FALSE;
2596    
2597      z_space.fixed                   := TRUE;      FIX z_space;
2598      s_shift.fixed                   := TRUE;      FIX s_shift;
2599      z_shift.fixed                   := TRUE;      FIX z_shift;
2600    
2601      END seqmod_fullthermo;      END seqmod_fullthermo;
2602    
2603      METHOD seqmod_adiabatic;      METHOD seqmod_adiabatic;
2604          objmult.fixed := TRUE;          FIX objmult;
2605          optime.fixed := TRUE;          FIX optime;
2606      hb_on := TRUE;      hb_on := TRUE;
2607      equilibrated := TRUE;      equilibrated := TRUE;
2608      RUN seqmod_fullthermo;      RUN seqmod_fullthermo;
2609      RUN heat_balance;      RUN heat_balance;
2610    
2611      z_space.fixed                   := TRUE;      FIX z_space;
2612      s_shift.fixed                   := TRUE;      FIX s_shift;
2613      z_shift.fixed                   := TRUE;      FIX z_shift;
2614    
2615      END seqmod_adiabatic;      END seqmod_adiabatic;
2616    
# Line 2629  END check_all; Line 2629  END check_all;
2629      END IF;      END IF;
2630      RUN specify_feed;      RUN specify_feed;
2631    
2632      condenser.liqout.T.fixed := FALSE;      FREE condenser.liqout.T;
2633      condenser.liqout.P.fixed := FALSE;      FREE condenser.liqout.P;
2634       END specify;       END specify;
2635       METHOD reset;       METHOD reset;
2636      RUN ClearAll;      RUN ClearAll;
# Line 2685  METHOD reset_to_fullthermo; Line 2685  METHOD reset_to_fullthermo;
2685          hb_on   := FALSE;          hb_on   := FALSE;
2686          equilibrated := TRUE;          equilibrated := TRUE;
2687      RUN reset;      RUN reset;
2688      distillate.T.fixed := FALSE;      FREE distillate.T;
2689      distillate.state.phase_fraction['vapor'].fixed := TRUE;      FIX distillate.state.phase_fraction['vapor'];
2690      distillate.state.phase_fraction['vapor'] := 0;      distillate.state.phase_fraction['vapor'] := 0;
2691  END reset_to_fullthermo;  END reset_to_fullthermo;
2692    
# Line 2694  METHOD reset_to_adiabatic; Line 2694  METHOD reset_to_adiabatic;
2694      hb_on   := TRUE;      hb_on   := TRUE;
2695          equilibrated := TRUE;          equilibrated := TRUE;
2696      RUN reset;      RUN reset;
2697      distillate.T.fixed := FALSE;      FREE distillate.T;
2698      distillate.state.phase_fraction['vapor'].fixed := TRUE;      FIX distillate.state.phase_fraction['vapor'];
2699      distillate.state.phase_fraction['vapor'] := 0;      distillate.state.phase_fraction['vapor'] := 0;
2700  END reset_to_adiabatic;  END reset_to_adiabatic;
2701    
# Line 2704  METHOD equipment_bounds; Line 2704  METHOD equipment_bounds;
2704  END equipment_bounds;  END equipment_bounds;
2705    
2706  METHOD optimization_DOF;  METHOD optimization_DOF;
2707      distillate.flow.fixed := FALSE;      FREE distillate.flow;
2708      condenser.reflux_ratio.fixed := FALSE;      FREE condenser.reflux_ratio;
2709      s_stack[1..2].fixed := FALSE;      FREE s_stack[1..2];
2710  END optimization_DOF;  END optimization_DOF;
2711  END simple_coll_column;  END simple_coll_column;
2712    

Legend:
Removed from v.1  
changed lines
  Added in v.576

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22