CIDARLAB / pyMINT

BSD 3-Clause "New" or "Revised" License
1 stars 2 forks source link

Certain terminals for ports/channels/nodes cause source/sink error (probably an autoplacement issue) #10

Open watturkara opened 3 years ago

watturkara commented 3 years ago

When trying to compile my design, I noticed that outputting from terminals 3 and 4 for any node/port resulted in a source/sink error during routing. I created a small example to test this, and it seems that most source/sink pairs will fail except when connecting from terminal 1 on one component to terminal 1 on the other component (again, only with nodes/ports).

This seems to be because the automatic placement of parts defaults to the same position for each component, causing the routing algorithm to not be able to find a path from input to output. However, as none of the examples show a position for any part and the documentation, itself, states that setting a position is optional, this seems to be an issue with the algorithm to determine component placement.

Here is the test code I made:

DEVICE mint_test

LAYER FLOW
PORT p1,p2,p3,p4,p5,p6,p7 portRadius=700;

NODE n1;

CHANNEL c1 from p1 3 to n1 1 channelWidth=800;
CHANNEL c2 from p2 2 to n1 4 channelWidth=800; 
CHANNEL c3 from n1 2 to p3 1 channelWidth=800;

CHANNEL c4 from p4 1 to p5 1 channelWidth=800;
CHANNEL c5 from p6 2 to p7 2 channelWidth=800;

END LAYER

And here is the output:


output dir: /var/www/fluigicad.org/jobs/tmp__6082f44bc4667500180b75c9/output
Running File: /var/www/fluigicad.org/jobs/tmp__6082f44bc4667500180b75c9/MINT_example.uf
Creating the output directory:
Computing Constraints
Pulling Default Values of Components
Pulling Dimensions of Components
Pulling Terminals of Components
Setting Default MAX Dimensions to the device: (76200, 76200)
Starting terminal/port assignment ...
output: /var/www/fluigicad.org/jobs/tmp__6082f44bc4667500180b75c9/output/mint_test.dot
Parsing Layers...
Layer 0:
Name - "FLOW_0"
ID - "0"
Type - "FLOW"
Group - "0"
Component - p1
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - p2
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - p3
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - p4
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - p5
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - p6
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - p7
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - n1
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 800
  spacing - 1000
  Port - 1
    Port.x - 0
    Port.y - 0
Adding to FLOW ...
Connection - c1
  Source - p1
    Source Terminal - ERROR!!!!!!
  Sink - n1
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c2
  Source - p2
    Source Terminal - ERROR!!!!!!
  Sink - n1
    Sink Terminal - ERROR!!!!!!
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c3
  Source - n1
    Source Terminal - ERROR!!!!!!
  Sink - p3
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c4
  Source - p4
    Source Terminal - 1
  Sink - p5
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c5
  Source - p6
    Source Terminal - ERROR!!!!!!
  Sink - p7
    Sink Terminal - ERROR!!!!!!
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Firing Constructor for Placer
---------------Initial Placement Work-----------------
PAR Return code:-11
Rendering 8 components and 5 connections
Place and Route completed with errors, please check the terminal output for information
watturkara commented 3 years ago

As an update to this, I learned that autoplacement isn't the direct cause of this issue, as it worked fine with other designs. It does seem, however, that terminals 3 and 4 on nodes and ports are unavailable. Because of this, my design was able to compile, but only about 1/3 of the channels could actually be routed by the tool.

Here is the full file I used to come to this conclusion:

DEVICE covid_test_circuit

LAYER FLOW

# pm  -> preamplification master mix (input)
# op  -> oligo P solution (input)
# dw -> ultrapure DEPC water (input)
# dm  -> detection master mix (input)
# od  -> oligo D solution (input)
# ps  -> pretreated sample (input)
# wp  -> waste product post melting analysis (output)

PORT pm, op, dw, dm, od, ps, wp portRadius=700;

# Connects different channels together
NODE n1_reagmix, n2_sampmix, n3_reagmix, n4_sampmix, n5_dwsplit, n6_diluter;

# Pumps to control flow rate of DEPC water to 2nd set of reagents and diluter
PUMP pu1_dw_dil, pu2_dw_reag, pu3_pcr1, pu4_pcr2 length=300 width=600 flowChannelWidth=800;

V MIXER preamp_reagmixer;
H MIXER diluter;
V MIXER nested_reagmixer;

# Length/bends assume flow rate of ~ 8.042 uL/min for PCR

V CURVED MIXER pcr1_revt bendLength=8000 numberOfBends=5;
V CURVED MIXER pcr1_stpdn bendLength=8000 numberOfBends=5;
V CURVED MIXER pcr1_denat bendLength=10000 numberOfBends=6;
V CURVED MIXER pcr1_cyc1 bendLength=4500 numberOfBends=20;
V CURVED MIXER pcr1_cyc2 bendLength=30000 numberOfBends=11;
V CURVED MIXER pcr1_finext bendLength=5000 numberOfBends= 4;
V CURVED MIXER pcr2_denat bendLength=10000 numberOfBends=6;
V CURVED MIXER pcr2_cyc1 bendLength=12500 numberOfBends=18;

# Should be incubator/chamber, but could not get this component to work, so
# a curved mixer was used instead
H CURVED MIXER melt_analysis bendLength=1000 numberOfBends=10;

### PREAMPLIFICATION STEP

## REAGENT PREP

# Split Ultrapure DEPC water via a node
# for use in different parts of the circuit
CHANNEL c0_dw from dw to n5_dwsplit channelWidth=800;

# Join reagents via a node
CHANNEL c1_pm from pm  to n1_reagmix  channelWidth=800;
CHANNEL c2_op from op  to n1_reagmix  channelWidth=800;
CHANNEL c3_dw from n5_dwsplit  to n1_reagmix  channelWidth=800;
# Connect sample to separate node
CHANNEL c4_ps from ps  to n2_sampmix  channelWidth=800;
# Connect reagents node with sample node
CHANNEL c5_combine from n1_reagmix  to n2_sampmix  channelWidth=800;
# Send combined products to mixer 
CHANNEL c6_mix from n2_sampmix  to  preamp_reagmixer  channelWidth=800;

# Pump combined products to target flow rate of 8.042 uL/min
CHANNEL c7_pump from preamp_reagmixer 2 to pu3_pcr1 1 channelWidth=800;

## PERFORM ROUND 1 PCR
# Reverse transcription step
CHANNEL c8_revt from pu3_pcr1 2 to pcr1_revt 2 channelWidth=800;
# Temperature step down step
CHANNEL c9_stpdn from pcr1_revt to pcr1_stpdn  channelWidth=800;
# Initial denaturation step
CHANNEL c10_denat from pcr1_stpdn  to pcr1_denat  channelWidth=800;
# 1st temperature cycle (6 cycles)
CHANNEL c11_cyc1 from pcr1_denat  to pcr1_cyc1 channelWidth=800;
# 2nd temperature cycle (22 cycles)
CHANNEL c12_cyc2 from pcr1_cyc1 to pcr1_cyc2 channelWidth=800;
# Final extension
CHANNEL c13_fin from pcr1_cyc2 to pcr1_finext channelWidth=800;

### NESTED AMPLIFICATION STEP

## REAGENT PREP

# Amplified sample dilution
CHANNEL c14_dil from pcr1_finext to n6_diluter channelWidth=800;
# Pump water from DEPC connect to ensure proper flowrate for dilution
CHANNEL c15_pump from n5_dwsplit to pu1_dw_dil 1 channelWidth=800;
CHANNEL c16_dw from pu1_dw_dil 2 to n6_diluter 1 channelWidth=800;
CHANNEL c17_mix from n6_diluter to diluter channelWidth=800;

# Join reagents via node
CHANNEL c18_dm from dm to n3_reagmix channelWidth=800;
CHANNEL c19_od from od to n3_reagmix channelWidth=800;
# Pump DEPC water to control flowrate for proper mixing ratios
CHANNEL c20_pump from n5_dwsplit 1 to pu2_dw_reag 1 channelWidth=800;
CHANNEL c21_dw from pu2_dw_reag 2 to n3_reagmix 1 channelWidth=800;
# Connect diluted preamp sample to different node
CHANNEL c22_dsamp from diluter to n4_sampmix channelWidth=800;
# Connect reagents node to sample node
CHANNEL c23_combine from n3_reagmix to n4_sampmix channelWidth=800;
# Send combined products to mixer
CHANNEL c24_mix from n4_sampmix to nested_reagmixer channelWidth=800;

# Pump combined products to target flow rate of 8.042 uL/min
CHANNEL c25_pump from nested_reagmixer 2 to pu4_pcr2 1 channelWidth=800;

## PERFORM ROUND 2 PCR
# Inital denaturation step
CHANNEL c26_denat from pu4_pcr2 2 to pcr2_denat 2 channelWidth=800;
# Temperature cycling (45 cycles)
CHANNEL c27_cyc1 from pcr2_denat to pcr2_cyc1 channelWidth=800;

### PERFORM MELTING ANALYSIS
# Move fully amplified sample to melting analysis chamber
CHANNEL c28_analyte from pcr2_cyc1 to melt_analysis channelWidth=800;
# Move analyzed sample to waste product port
CHANNEL c29_done from melt_analysis to wp channelWidth=800;
END LAYER

# LAYER CONTROL
# # Control port for valve
# PORT melt_valve_port portRadius=700;
# # Valves to control fluide flow in/out of melting analysis chamber 
# VALVE melt_valve1 on c28_analyte;
# VALVE melt_valve2 on c29_done;
# # Net to connect valve input to open/close both simultaneously
# NET valve_net from melt_valve_port 1 to melt_valve1 4, melt_valve2 4 channelWidth=50;

# END LAYER

And here is the log output:

 _____ _       _       _ 
|  ___| |_   _(_) __ _(_)
| |_  | | | | | |/ _` | |
|  _| | | |_| | | (_| | |
|_|   |_|\__,_|_|\__, |_|
                 |___/   

output dir: /var/www/fluigicad.org/jobs/tmp__60833fe0c4667500180b7791/output
Running File: /var/www/fluigicad.org/jobs/tmp__60833fe0c4667500180b7791/MINT_example.uf
Creating the output directory:
Computing Constraints
Pulling Default Values of Components
Pulling Dimensions of Components
Pulling Terminals of Components
Setting Default MAX Dimensions to the device: (76200, 76200)
Starting terminal/port assignment ...
No port assigned to connection ref - c0_dw:dw:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c0_dw:n5_dwsplit:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c1_pm:pm:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c1_pm:n1_reagmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c2_op:op:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c2_op:n1_reagmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c3_dw:n5_dwsplit:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c3_dw:n1_reagmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c4_ps:ps:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c4_ps:n2_sampmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c5_combine:n1_reagmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c5_combine:n2_sampmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c6_mix:n2_sampmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c6_mix:preamp_reagmixer:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c9_stpdn:pcr1_revt:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c9_stpdn:pcr1_stpdn:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c10_denat:pcr1_stpdn:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c10_denat:pcr1_denat:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c11_cyc1:pcr1_denat:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c11_cyc1:pcr1_cyc1:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c12_cyc2:pcr1_cyc1:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c12_cyc2:pcr1_cyc2:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c13_fin:pcr1_cyc2:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c13_fin:pcr1_finext:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c14_dil:pcr1_finext:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c14_dil:n6_diluter:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c15_pump:n5_dwsplit:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c17_mix:n6_diluter:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c17_mix:diluter:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c18_dm:dm:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c18_dm:n3_reagmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c19_od:od:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c19_od:n3_reagmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c22_dsamp:diluter:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c22_dsamp:n4_sampmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c23_combine:n3_reagmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c23_combine:n4_sampmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c24_mix:n4_sampmix:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
No port assigned to connection ref - c24_mix:nested_reagmixer:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c27_cyc1:pcr2_denat:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c27_cyc1:pcr2_cyc1:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c28_analyte:pcr2_cyc1:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c28_analyte:melt_analysis:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c29_done:melt_analysis:None
Auto Port Assign Scheme - Target contains only 2 or 4 port options
Assigned port - 1
No port assigned to connection ref - c29_done:wp:None
Auto Port Assign Scheme - Target contains only 1 port option
Assigned port - 1
output: /var/www/fluigicad.org/jobs/tmp__60833fe0c4667500180b7791/output/covid_test_circuit.dot
Parsing Layers...
Layer 0:
Name - "FLOW_0"
ID - "0"
Type - "FLOW"
Group - "0"
Component - pm
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - op
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - dw
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - dm
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - od
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - ps
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - wp
  xpos - 0
  ypos - 0
  x-span - 1400
  y-span - 1400
  spacing - 1000
  Port - 1
    Port.x - 700
    Port.y - 700
Adding to FLOW ...
Component - n1_reagmix
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 800
  spacing - 1000
  Port - 1
    Port.x - 0
    Port.y - 0
Adding to FLOW ...
Component - n2_sampmix
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 800
  spacing - 1000
  Port - 1
    Port.x - 0
    Port.y - 0
Adding to FLOW ...
Component - n3_reagmix
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 800
  spacing - 1000
  Port - 1
    Port.x - 0
    Port.y - 0
Adding to FLOW ...
Component - n4_sampmix
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 800
  spacing - 1000
  Port - 1
    Port.x - 0
    Port.y - 0
Adding to FLOW ...
Component - n5_dwsplit
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 800
  spacing - 1000
  Port - 1
    Port.x - 0
    Port.y - 0
Adding to FLOW ...
Component - n6_diluter
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 800
  spacing - 1000
  Port - 1
    Port.x - 0
    Port.y - 0
Adding to FLOW ...
Component - pu1_dw_dil
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 2300
  spacing - 1000
  Port - 1
    Port.x - 400
    Port.y - 0
  Port - 2
    Port.x - 400
    Port.y - 2300
  Port - 3
    Port.x - 400
    Port.y - 150
  Port - 4
    Port.x - 400
    Port.y - 1150
  Port - 5
    Port.x - 400
    Port.y - 2150
Adding to FLOW ...
Component - pu2_dw_reag
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 2300
  spacing - 1000
  Port - 1
    Port.x - 400
    Port.y - 0
  Port - 2
    Port.x - 400
    Port.y - 2300
  Port - 3
    Port.x - 400
    Port.y - 150
  Port - 4
    Port.x - 400
    Port.y - 1150
  Port - 5
    Port.x - 400
    Port.y - 2150
Adding to FLOW ...
Component - pu3_pcr1
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 2300
  spacing - 1000
  Port - 1
    Port.x - 400
    Port.y - 0
  Port - 2
    Port.x - 400
    Port.y - 2300
  Port - 3
    Port.x - 400
    Port.y - 150
  Port - 4
    Port.x - 400
    Port.y - 1150
  Port - 5
    Port.x - 400
    Port.y - 2150
Adding to FLOW ...
Component - pu4_pcr2
  xpos - 0
  ypos - 0
  x-span - 800
  y-span - 2300
  spacing - 1000
  Port - 1
    Port.x - 400
    Port.y - 0
  Port - 2
    Port.x - 400
    Port.y - 2300
  Port - 3
    Port.x - 400
    Port.y - 150
  Port - 4
    Port.x - 400
    Port.y - 1150
  Port - 5
    Port.x - 400
    Port.y - 2150
Adding to FLOW ...
Component - preamp_reagmixer
  xpos - 0
  ypos - 0
  x-span - 4060
  y-span - 4860
  spacing - 1000
  Port - 1
    Port.x - 2030
    Port.y - 0
  Port - 2
    Port.x - 2030
    Port.y - 4860
Adding to FLOW ...
Component - diluter
  xpos - 0
  ypos - 0
  x-span - 4060
  y-span - 4860
  spacing - 1000
  Port - 1
    Port.x - 2030
    Port.y - 0
  Port - 2
    Port.x - 2030
    Port.y - 4860
Adding to FLOW ...
Component - nested_reagmixer
  xpos - 0
  ypos - 0
  x-span - 4060
  y-span - 4860
  spacing - 1000
  Port - 1
    Port.x - 2030
    Port.y - 0
  Port - 2
    Port.x - 2030
    Port.y - 4860
Adding to FLOW ...
Component - pcr1_revt
  xpos - 0
  ypos - 0
  x-span - 10830
  y-span - 21100
  spacing - 1000
  Port - 1
    Port.x - 5415
    Port.y - 0
  Port - 2
    Port.x - 5415
    Port.y - 21100
Adding to FLOW ...
Component - pcr1_stpdn
  xpos - 0
  ypos - 0
  x-span - 10830
  y-span - 21100
  spacing - 1000
  Port - 1
    Port.x - 5415
    Port.y - 0
  Port - 2
    Port.x - 5415
    Port.y - 21100
Adding to FLOW ...
Component - pcr1_denat
  xpos - 0
  ypos - 0
  x-span - 12830
  y-span - 25160
  spacing - 1000
  Port - 1
    Port.x - 6415
    Port.y - 0
  Port - 2
    Port.x - 6415
    Port.y - 25160
Adding to FLOW ...
Component - pcr1_cyc1
  xpos - 0
  ypos - 0
  x-span - 7330
  y-span - 82000
  spacing - 1000
  Port - 1
    Port.x - 3665
    Port.y - 0
  Port - 2
    Port.x - 3665
    Port.y - 82000
Adding to FLOW ...
Component - pcr1_cyc2
  xpos - 0
  ypos - 0
  x-span - 32830
  y-span - 45460
  spacing - 1000
  Port - 1
    Port.x - 16415
    Port.y - 0
  Port - 2
    Port.x - 16415
    Port.y - 45460
Adding to FLOW ...
Component - pcr1_finext
  xpos - 0
  ypos - 0
  x-span - 7830
  y-span - 17040
  spacing - 1000
  Port - 1
    Port.x - 3915
    Port.y - 0
  Port - 2
    Port.x - 3915
    Port.y - 17040
Adding to FLOW ...
Component - pcr2_denat
  xpos - 0
  ypos - 0
  x-span - 12830
  y-span - 25160
  spacing - 1000
  Port - 1
    Port.x - 6415
    Port.y - 0
  Port - 2
    Port.x - 6415
    Port.y - 25160
Adding to FLOW ...
Component - pcr2_cyc1
  xpos - 0
  ypos - 0
  x-span - 15330
  y-span - 73880
  spacing - 1000
  Port - 1
    Port.x - 7665
    Port.y - 0
  Port - 2
    Port.x - 7665
    Port.y - 73880
Adding to FLOW ...
Component - melt_analysis
  xpos - 0
  ypos - 0
  x-span - 3830
  y-span - 41400
  spacing - 1000
  Port - 1
    Port.x - 1915
    Port.y - 0
  Port - 2
    Port.x - 1915
    Port.y - 41400
Adding to FLOW ...
Connection - c0_dw
  Source - dw
    Source Terminal - 1
  Sink - n5_dwsplit
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c1_pm
  Source - pm
    Source Terminal - 1
  Sink - n1_reagmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c2_op
  Source - op
    Source Terminal - 1
  Sink - n1_reagmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c3_dw
  Source - n5_dwsplit
    Source Terminal - 1
  Sink - n1_reagmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c4_ps
  Source - ps
    Source Terminal - 1
  Sink - n2_sampmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c5_combine
  Source - n1_reagmix
    Source Terminal - 1
  Sink - n2_sampmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c6_mix
  Source - n2_sampmix
    Source Terminal - 1
  Sink - preamp_reagmixer
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c7_pump
  Source - preamp_reagmixer
    Source Terminal - 2
  Sink - pu3_pcr1
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c8_revt
  Source - pu3_pcr1
    Source Terminal - 2
  Sink - pcr1_revt
    Sink Terminal - 2
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c9_stpdn
  Source - pcr1_revt
    Source Terminal - 1
  Sink - pcr1_stpdn
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c10_denat
  Source - pcr1_stpdn
    Source Terminal - 1
  Sink - pcr1_denat
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c11_cyc1
  Source - pcr1_denat
    Source Terminal - 1
  Sink - pcr1_cyc1
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c12_cyc2
  Source - pcr1_cyc1
    Source Terminal - 1
  Sink - pcr1_cyc2
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c13_fin
  Source - pcr1_cyc2
    Source Terminal - 1
  Sink - pcr1_finext
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c14_dil
  Source - pcr1_finext
    Source Terminal - 1
  Sink - n6_diluter
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c15_pump
  Source - n5_dwsplit
    Source Terminal - 1
  Sink - pu1_dw_dil
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c16_dw
  Source - pu1_dw_dil
    Source Terminal - 2
  Sink - n6_diluter
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c17_mix
  Source - n6_diluter
    Source Terminal - 1
  Sink - diluter
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c18_dm
  Source - dm
    Source Terminal - 1
  Sink - n3_reagmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c19_od
  Source - od
    Source Terminal - 1
  Sink - n3_reagmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c20_pump
  Source - n5_dwsplit
    Source Terminal - 1
  Sink - pu2_dw_reag
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c21_dw
  Source - pu2_dw_reag
    Source Terminal - 2
  Sink - n3_reagmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c22_dsamp
  Source - diluter
    Source Terminal - 1
  Sink - n4_sampmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c23_combine
  Source - n3_reagmix
    Source Terminal - 1
  Sink - n4_sampmix
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c24_mix
  Source - n4_sampmix
    Source Terminal - 1
  Sink - nested_reagmixer
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c25_pump
  Source - nested_reagmixer
    Source Terminal - 2
  Sink - pu4_pcr2
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c26_denat
  Source - pu4_pcr2
    Source Terminal - 2
  Sink - pcr2_denat
    Sink Terminal - 2
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c27_cyc1
  Source - pcr2_denat
    Source Terminal - 1
  Sink - pcr2_cyc1
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c28_analyte
  Source - pcr2_cyc1
    Source Terminal - 1
  Sink - melt_analysis
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Connection - c29_done
  Source - melt_analysis
    Source Terminal - 1
  Sink - wp
    Sink Terminal - 1
  channelWidth - 800
  channelSpacing - 1600
Adding to FLOW layer ... 
Firing Constructor for Placer
---------------Initial Placement Work-----------------
after placement width: 113110 height: 246480
PlacementCell - pm| Rel Position (38030, 0)
PlacementCell - op| Rel Position (36230, 85400)
PlacementCell - dw| Rel Position (41290, 36220)
PlacementCell - dm| Rel Position (43690, 36220)
PlacementCell - od| Rel Position (0, 0)
PlacementCell - ps| Rel Position (0, 2400)
PlacementCell - wp| Rel Position (43690, 28560)
PlacementCell - n1_reagmix| Rel Position (63950, 58320)
PlacementCell - n2_sampmix| Rel Position (50120, 85400)
PlacementCell - n3_reagmix| Rel Position (41290, 34420)
PlacementCell - n4_sampmix| Rel Position (2400, 2400)
PlacementCell - n5_dwsplit| Rel Position (75780, 31860)
PlacementCell - n6_diluter| Rel Position (63950, 87800)
PlacementCell - pu1_dw_dil| Rel Position (51920, 28560)
PlacementCell - pu2_dw_reag| Rel Position (63950, 2400)
PlacementCell - pu3_pcr1| Rel Position (50120, 28560)
PlacementCell - pu4_pcr2| Rel Position (36230, 2400)
PlacementCell - preamp_reagmixer| Rel Position (36230, 87800)
PlacementCell - diluter| Rel Position (41290, 87800)
PlacementCell - nested_reagmixer| Rel Position (38630, 28560)
PlacementCell - pcr1_revt| Rel Position (36230, 119820)
PlacementCell - pcr1_stpdn| Rel Position (63950, 36220)
PlacementCell - pcr1_denat| Rel Position (50120, 93660)
PlacementCell - pcr1_cyc1| Rel Position (4200, 2400)
PlacementCell - pcr1_cyc2| Rel Position (2400, 85400)
PlacementCell - pcr1_finext| Rel Position (41290, 93660)
PlacementCell - pcr2_denat| Rel Position (38630, 2400)
PlacementCell - pcr2_cyc1| Rel Position (63950, 89600)
PlacementCell - melt_analysis| Rel Position (51920, 38620)
---------------Placement end.-----------------

Obstacles: 
  Cell{0} - (38030, 0, 1400, 1400)
  Cell{1} - (36230, 85400, 1400, 1400)
  Cell{2} - (41290, 36220, 1400, 1400)
  Cell{3} - (43690, 36220, 1400, 1400)
  Cell{4} - (0, 0, 1400, 1400)
  Cell{5} - (0, 2400, 1400, 1400)
  Cell{6} - (43690, 28560, 1400, 1400)
  Cell{7} - (63950, 58320, 800, 800)
  Cell{8} - (50120, 85400, 800, 800)
  Cell{9} - (41290, 34420, 800, 800)
  Cell{10} - (2400, 2400, 800, 800)
  Cell{11} - (75780, 31860, 800, 800)
  Cell{12} - (63950, 87800, 800, 800)
  Cell{13} - (51920, 28560, 800, 2300)
  Cell{14} - (63950, 2400, 800, 2300)
  Cell{15} - (50120, 28560, 800, 2300)
  Cell{16} - (36230, 2400, 800, 2300)
  Cell{17} - (36230, 87800, 4060, 4860)
  Cell{18} - (41290, 87800, 4060, 4860)
  Cell{19} - (38630, 28560, 4060, 4860)
  Cell{20} - (36230, 119820, 10830, 21100)
  Cell{21} - (63950, 36220, 10830, 21100)
  Cell{22} - (50120, 93660, 12830, 25160)
  Cell{23} - (4200, 2400, 7330, 82000)
  Cell{24} - (2400, 85400, 32830, 45460)
  Cell{25} - (41290, 93660, 7830, 17040)
  Cell{26} - (38630, 2400, 12830, 25160)
  Cell{27} - (63950, 89600, 15330, 73880)
  Cell{28} - (51920, 38620, 3830, 41400)
---------------Initial Routing Work-----------------
Routing Boundary - (-98490,-246000,178770,410480)
Route - c0_dw
  Source - (42690,36220)
  Target - (75780,31860)
Route - c1_pm
  Source - (39430,1400)
  Target - (63950,58320)
Route - c2_op
  Source - (37630,85400)
  Target - (63950,58320)
Route - c3_dw
  Source - (75780,31860)
  Target - (63950,58320)
Route - c4_ps
  Source - (1400,3800)
  Target - (50120,85400)
Route - c5_combine
  Source - (63950,58320)
  Target - (50120,85400)
Route - c6_mix
  Source - (50120,85400)
  Target - (38260,87800)
Route - c7_pump
  Source - (38260,92660)
  Target - (50520,28560)
Route - c8_revt
  Source - (50520,30860)
  Target - (41645,140920)
Route - c9_stpdn
  Source - (41645,119820)
  Target - (69365,36220)
Route - c10_denat
  Source - (69365,36220)
  Target - (56535,93660)
Route - c11_cyc1
  Source - (56535,93660)
  Target - (7865,2400)
Route - c12_cyc2
  Source - (7865,2400)
  Target - (18815,85400)
Route - c13_fin
  Source - (18815,85400)
  Target - (45205,93660)
Route - c14_dil
  Source - (45205,93660)
  Target - (63950,87800)
Route - c15_pump
  Source - (75780,31860)
  Target - (52320,28560)
Route - c16_dw
  Source - (52320,30860)
  Target - (63950,87800)
Route - c17_mix
  Source - (63950,87800)
  Target - (43320,87800)
Route - c18_dm
  Source - (43690,36220)
  Target - (41290,34420)
Route - c19_od
  Source - (1400,1400)
  Target - (41290,34420)
Route - c20_pump
  Source - (75780,31860)
  Target - (64350,2400)
Route - c21_dw
  Source - (64350,4700)
  Target - (41290,34420)
Route - c22_dsamp
  Source - (43320,87800)
  Target - (2400,2400)
Route - c23_combine
  Source - (41290,34420)
  Target - (2400,2400)
Route - c24_mix
  Source - (2400,2400)
  Target - (40660,28560)
Route - c25_pump
  Source - (40660,33420)
  Target - (36630,2400)
Route - c26_denat
  Source - (36630,4700)
  Target - (45045,27560)
Route - c27_cyc1
  Source - (45045,2400)
  Target - (71615,89600)
Route - c28_analyte
  Source - (71615,89600)
  Target - (53835,38620)
Route - c29_done
  Source - (53835,38620)
  Target - (45090,29960)
Ans :
  Route - c0_dw success  (41990,36920)
  Route - c1_pm success  (38730,700)-(39430,1400)-(41639,944)-(41786,470)-(41821,234)-(53863,2400)-(53823,2835)-(52612,25451)-(53743,26385)-(53772,26399)-(53801,26414)-(55098,28900)-(54705,29914)-(54888,31895)-(58056,37945)-(62984,55119)-(63950,58320)
  Route - c2_op success  (36930,86100)
  Route - c3_dw failure
  Route - c4_ps success  (700,3100)-(1400,3800)-(125,6199)-(70,6201)-(-881,1564)-(-885,166)-(-888,-832)-(-893,-2230)-(495,-2226)-(3803,0)-(13923,2183)-(13933,2400)-(13922,2622)-(13291,4034)-(13258,4068)-(13110,4209)-(37502,35541)-(40000,39647)-(40267,39794)-(40987,40003)-(41036,40009)-(49646,80799)-(49671,80866)-(50137,81632)-(50369,81855)-(50120,85400)
  Route - c5_combine failure
  Route - c6_mix success  (50120,85400)-(46620,85760)-(46606,85751)-(44931,86017)-(41105,86866)-(39280,86482)-(38505,86190)-(38040,86954)-(38260,87800)
  Route - c7_pump failure
  Route - c8_revt failure
  Route - c9_stpdn success  (41645,119820)-(45775,117789)-(47589,117476)-(49344,119073)-(49790,121200)-(48462,138968)-(62509,161556)-(62260,161771)-(62086,161963)-(61826,162354)-(62629,165487)-(64962,165659)-(80177,165708)-(79991,91895)-(79962,87296)-(77407,30403)-(77409,29604)-(75684,29630)-(75620,29656)-(74875,29633)-(73447,31282)-(73401,31519)-(73525,32690)-(69365,36220)
  Route - c10_denat failure
  Route - c11_cyc1 failure
  Route - c12_cyc2 failure
  Route - c13_fin failure
  Route - c14_dil success  (45205,93660)-(46797,93043)-(47819,91639)-(49439,91278)-(50120,91257)-(50376,91270)-(55089,91740)-(63950,87800)
  Route - c15_pump failure
  Route - c16_dw failure
  Route - c17_mix failure
  Route - c18_dm success  (44390,36920)-(43690,36220)-(41453,35480)-(41290,34420)
  Route - c19_od success  (700,700)
  Route - c20_pump failure
  Route - c21_dw failure
  Route - c22_dsamp failure
  Route - c23_combine failure
  Route - c24_mix failure
  Route - c25_pump failure
  Route - c26_denat failure
  Route - c27_cyc1 failure
  Route - c28_analyte failure
  Route - c29_done success  (53835,38620)-(52890,36421)-(52043,36220)-(51920,36217)-(51612,36236)-(51493,36255)-(51377,36279)-(48475,32612)-(45090,29960)-(44390,29260)
---------------Routing end.-----------------
PAR Return code:0
Reducing the Size of the device and adding device padding: 20000 um
Updated the device dimensions: (119280, 279640) microns
Rendering 29 components and 30 connections
nicksacco17 commented 3 years ago

I had the same issue while using the Neptune UI:

DEVICE qrtPCR

LAYER FLOW 

# I/O PORT DECLARATION
PORT in1 portRadius=500;
PORT in2 portRadius=500;
PORT out1 portRadius=500;

# CONNECTING NODES
NODE node0;
NODE node1;
NODE node2;
NODE node3; 

# Section 1: Mixing - 95mm long, 180 um wide (3 bends)
V MIXER zone1 numberOfBends=3 bendSpacing=250 bendLength=15440 channelWidth=180;

# Section 2: Reverse Transcription - 372 mm long, 260 um wide, heated at 52 C (4 bends)
V MIXER zone2 numberOfBends=5 bendSpacing=250 bendLength=36807 channelWidth=260;

# Section 3: Activation - 354 mm long, 260 um wide, 98 C (5 bends)
V MIXER zone3 numberOfBends=5 bendSpacing=250 bendLength=36807 channelWidth=260;

# Section 4: Thermal Cycling - 1131 mm long, 260 um wide, passes 40 times through heated areas at 97 C, 62 C
H MIXER zone4 numberOfBends=40 bendSpacing=250 bendLength=27882 channelWidth=260;

# Connect the sections according to the device schematic, i.e. how it should be drawn
CHANNEL c1 from in1 2 to node0 4 channelWidth=180;
CHANNEL c2 from in2 4 to node0 2 channelWidth=180;

CHANNEL c3 from node0 3 to zone1 1 channelWidth=260;
CHANNEL c4 from zone1 2 to zone2 1 channelWidth=260;

CHANNEL c5 from zone2 2 to zone3 1 channelWidth=260;
CHANNEL c6 from zone3 2 to node1 2 channelWidth=260;
CHANNEL c7 from node1 3 to zone4 1 channelWidth=260;

CHANNEL c8 from zone4 2 to node2 3 channelWidth=260;
CHANNEL c9 from node2 4 to node3 2 channelWidth=260;
CHANNEL c10 from node3 1 to out1 3 channelWidth=260;

END LAYER

neptune_expected_output_8 neptune_expected_output_9

When trying to specify terminals on the PORT and NODES, we had compile issues. We could specify only terminal 1 on PORTS and NODES, but we could specify both terminal 1 and 2 on other components, such as MIXER.